找水王
一、题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、设计思想
(注:自己想的未体现快速遍历!!!因此,我还是进行了搜了看了别人的思想,自我实现代码)
( 百度的时候参考的思路的代码:http://www.nowamagic.net/librarys/veda/detail/2377)
(此处暂只有自己的慢速代码,快速的仍有错误,还在修改中)
不考虑时间复杂度的思路:
整体思路:
首先遍历所有的发帖人ID,删除重复ID,并统计重复出现的次数,次数加一大于帖子总数的1/2,即输出结果。
具体思路:
将一串ID(帖子对应的,即发帖人的ID)放入一个数组中。
从ID数组第一个开始遍历,后一个与前面的都不相同,则保留;
若相同,则数组前移,并在另一个计数数组中进行重复次数记录。
最后在计数数组中寻找最大的值即可,并找到对应的ID数组中的对应的ID。
三、代码实现
//找水王2016.5.20 //20143066毛雯雯 #include<iostream> using namespace std; void main() { int id_array[12]={3,1,2,3,4,3,3,5,3,6,3,3}; //ID数组,仅用12,做一个例子,主要验证思路的正确 int i,j; //循环变量 int count_array[12]={0,0,0,0,0,0,0,0,0,0,0,0};//计数数组 cout<<"帖子ID为:"<<endl; for(i=0;i<12;i++) { cout << id_array[i] << " "; } cout<<endl; cout<<endl; for(i=0;i<12;i++) { for(j=1;j<12;j++) { if(id_array[i]==id_array[j]) { count_array[i]++; } } } cout<<"水王ID为:"<<endl; for(i=0;i<12;i++) { if(count_array[i]>6) { cout << id_array[i] << " "; } } }
四、实现截图
五、个人总结
数组的初始化要注意(数字还是ASCII中对应的),不太会删数(有错),另外,还是好好想想快速算法。