您的位置:首页 > 其它

找水王1

2016-05-20 18:57 141 查看
一、题目与要求

题目、三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

要求、如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

二、设计思想

  排序法:由于该“水王”发帖数目超过了帖子数目的一半,将列表中的ID从小到大进行排序,则中间的ID即为水王。但由于其时间复杂度不满足要求,因此需要采用更便捷的方法。

  每次删除两个不同的数,因为“水王”发帖数过半,因此删除这俩数后“水王”发帖数依旧过半,若两ID相同则利用标志key++,key>0且两ID不同时key--。

三、源代码

//找水王,信1301-1,李青 2016/5/20
#include<iostream>
using namespace std;

int main()
{
int key = 0;
int king = 0;
int i = 0;
int array[] = { 5, 5, 3, 5, 3, 3, 5, 5, 3, 3, 4, 3, 2, 3, 5, 3, 7, 5, 3, 2, 5};
for (i = 0; i<20; i++)
{
if (key == 0)
{
king = array[i];
cout << "目前的水王是:" << array[i] << endl;
key = 1;
}
else
{
if (king == array[i])
{
key++;
}
else
{
key--;
}
}
}
cout << "水王的ID是:" << king<< endl;
return 0;
}


四、运行结果:



五、心得体会

  这次找水王的程序体现了代码优化的一个重要思想,那就是对于问题的深入分析是优化的前提,由题目我们可以知道,水王是发帖数超过一半的人,所以只要由小到大排序,中间的ID就是水王的ID,但是这样做并不是较为优质的解法,通过比较并删除不同的ID最后得到的也是水王的ID,这种解法就比较符合简洁、高效的原则了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: