题目:已知帖子数量和ID号,水王的发帖数超过帖子数的一半,要求快速找出水王
设计思想:快速找出就要求算法必须时间复杂度小,本题利用相同则保留不同则消除的思想,快速找出帖子数最多的水王
代码:
#include<iostream> using namespace std; #define N 100 int main() { int ID[N];//发帖者ID int i,count=0,sw,a;//计数变量,相同次数,水王,帖子的数量 cout << "**************一起来找水王****************" << endl; cout << "输入帖子的数量" << endl; cin >> a; if (a <= 0) { cout << "输入的帖子数量不正确,请重新输入" << endl; cin >> a; while (a < 0) { cout << "输入的帖子数量不正确,请重新输入" << endl; cin >> a; } } cout << "输入发帖者id号:" << endl; for (i = 0; i<a; i++) { cin >> ID[i]; } for (i = 0; i<a; i++)//遍历a次 { if (count == 0) { sw = ID[i]; count = 1; } else { if (sw == ID[i])//相同则计数加1,不同则减一 { count++; } else count--; } } cout << "水王的id是:" << sw << endl; return 0; }
测试结果:
===== ===== ===== ===== =====
Compiling...
Compiling done.
===== ===== ===== ===== =====
Doing Unit Test Case 01
输入帖子数量:
0
显示:输入的帖子数量不正确
Done: 01.
===== ===== ===== ===== =====
Doing Unit Test Case 02
输入帖子数量:
10
输入发帖者ID号:
11 23 32 54 23 11 11 11 11 11
水王的ID是:11
Done: 02.
ALL DONE.
===== ===== ===== ===== =====
总结:这次程序实现并不难,但要寻求最快,必须要选取更好的算法,通过这次测试,感觉自己视野打开了,要根据不同问题,自己设计选取最合适的算法。
开发日志:
星期 | 听课 | 上网 | 读书 | 编程 | 总计 |
周一 | 2 | 1 | 1 | 4 | |
周二 | |||||
周三 | 1 | 1 | |||
周四 | 2 | 1 | 3 | ||
周五 | 2 | 2 |
时间记录日志:
日期 | 开始时间 | 结束时间 | 休息时间 | 工作时间 | 活动内容 |
5/17 | 19:00 | 21:10 | 10 | 120 | 查资料 |
5/18 | 14:00 | 15:10 | 10 | 120 | 看书 |
5/19 | 14:00 | 17:30 | 30 | 180 | 编程 |
5/20 | 14:20 | 16:20 | 0 | 120 | 编程 写博客 |
缺陷记录日志:
这次程序思想很重要,一开始自己想的是遍历,后来在老师的提醒下,才明白了更好的算法。