水王练习1

1、实验题目

   三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

2、实验思路

  开始看到这个题目根本不知道什么意思,也不知道这样一个问题该如何用程序解决,后来在老师的分析下才懂了这个题目的意思,相当于给了你很多个每个帖子对应的id,其中有一个id出现的次数要超过帖子总数的一半,让我们找出这个id。

  一开始我相信很多人的想法都和我一样,就是对每一个id出现的次数进行计数,从中找出那个出现次数最多的id,这应该是最笨的方法,当然这样的话程序的时间复杂度便会增大,其实这道题有一个特殊的地方就是这个水王发帖的数目超过了总数的一半,他的数量是做多的,而更特殊的是”超过总帖子的一半“,由此在老师的提醒下进行两两消除,从而得到一个更快速的解法,即两两比较相同则保留,不同则消除。

3、实验代码

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int length,i,id;
 7     int ID[10000];
 8     cout << "请输入帖子的总个数:";
 9     cin >> length;
10 
11     cout << "请依次输入每个帖子的发布者的ID:" << endl;
12     for (i = 0; i < length; i++)
13     {
14         cin >> id;
15         ID[i] = id;
16     }
17 
18     int n = 0,  shuiwang;
19 
20     for (i = 0; i < length; i++)
21     {
22         if (n == 0)
23         {
24             shuiwang = ID[i], n = 1;
25         }
26         else
27         {
28             if (shuiwang == ID[i])
29             {
30                 n++;
31             }
32             else
33             {
34                 n--;
35             }
36         }
37     }
38     cout << "水王的ID是:" << shuiwang<<endl;
39     return 0;
40 }
View Code

4、实验测试截图

5、时间记录日志(单位:h):

 

日期开始时间结束时间中断时间(min)净时间(min)活动备注
星期一14:0015:5010(课间)100听课软件工程
星期二20:0022:000120编程水王1
星期三15:0017:0010(休息)120看书人月神话
星期四14:0015:5010(课间)100上机水王1
 20:0021:3010(休息)80编程水王1
星期五18:3019:1010(休息)30发博客水王1

转载于:https://www.cnblogs.com/zz0906/p/5509059.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值