课堂测试-找小水王
题目:在上一次的基础上,大水王消失了,出现了三个小水王,并且他们发帖数均超过总数的1/4,要求:如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这三个小水王吗?
思路:继承上次寻找大水王的思想,定义三个计数器,不同则排除,相同则加1,最后剩下的就是三个小水王
代码:
//找小水王 lvguanghao #include <iostream> using namespace std; #define N 100 int main() { int xiaoshuiwang[3]; int ID[N], a; int num = 0; int count[3] = { 0 }; bool flag = false; cout << "请输入ID" << endl; while (cin >> a)//输入一个数组 敲回车结束 { ID[num++] = a; if (getchar() == '\n') { break; } } for (int i = 0; i < num; i++) { if (ID[i] == 0) { cout << "输入ID数不正确" << endl; return 0; } } for (int i = 0; i < num; i++) { flag = false; for (int j = 0; j < 3; j++) { if (count[j] == 0) { continue; } if (xiaoshuiwang[j] == ID[i]) { count[j]++; flag = true; } } if (flag == true) { continue; } for (int j = 0; j < 3; j++) { if (count[j] == 0) { xiaoshuiwang[j] = ID[i]; count[j]++; flag = true; break; } } if (flag == true) { continue; } for (int j = 0; j < 3; j++) { count[j]--; } } cout << "水王ID 分别为: " << endl; cout << xiaoshuiwang[0] << " " << xiaoshuiwang[1] << " " << xiaoshuiwang[2] << endl; }
单元测试:
测试结果:
===== ===== ===== ===== =====
Compiling...
Compiling done.
===== ===== ===== ===== =====
Doing Unit Test Case 01
输入帖子数量:
0
显示:输入的帖子数量不正确
Done: 01.
===== ===== ===== ===== =====
Doing Unit Test Case 02
输入帖子数量:
10
输入发帖者ID号:
1 2 3 1 2 3 1 2 3 4 5
小水王的ID是:1 2 3
Done: 02.
ALL DONE.
===== ===== ===== ===== =====
开发日志:
星期 | 听课 | 上网 | 读书 | 编程 | 总计 |
周一 | 2 | 1 | 1 | 4 | |
周二 | |||||
周三 | 1 | 1 | |||
周四 | 2 | 1 | 3 | ||
周五 | 2 | 2 |
时间记录日志:
日期 | 开始时间 | 结束时间 | 休息时间 | 工作时间 | 活动内容 |
5/23 | 19:00 | 21:10 | 10 | 120 | 查资料 |
5/25 | 14:00 | 15:10 | 10 | 120 | 看书 |
5/26 | 14:00 | 17:30 | 30 | 180 | 编程 |
5/27 | 14:20 | 16:20 | 0 | 120 | 编程写博客 |
缺陷记录日志:
这次程序继承上次的测试,思想上大致相同,只是分析的情况更复杂,自己一开始没有想通这个想法,而且要判断的情况比较复杂,用三个计数器来记录,还是要多思考。