课堂练习--找“水王”

一、题目要求

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

      如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者ID在其中,请设计算法快速找到这个传说中的“水王”。

二、设计思路

     本题要求时间复杂度是o(n),我们可以设置一个计数器flag,和一个变量shuiwang存放当前的ID,当flag为0时,将arry[i]赋给shuiwang,否则,比较i和i+1,相等flag+1,不等flag-1。

三、源代码

 1 #include "stdio.h"
 2 #define N 1000
 3  int main()
 4  {
 5      int arry[N],shuiwang,flag,num,i;
 6      printf("请输入ID的个数:");
 7      scanf("%d",&num);
 8      printf("请输入ID:
");
 9      for(i=0;i<num;i++)
10      {
11          scanf("%d",&arry[i]);
12      }
13      for(i=flag=0;i<num;i++)
14      {
15          if(flag==0)
16          {
17              shuiwang=arry[i],flag=1;
18          }
19          else
20          {
21              if(shuiwang==arry[i])
22              {
23                  flag++;
24              }
25              else
26              {
27                  flag--;
28              }
29          }
30      }
31      printf("这个“水王”的ID就是:");
32      printf("%d
",shuiwang);
33      return 0;
34  }
View Code

四、结果截图

五、实验心得

      课堂上,老师让我们先从简单的方法开始,先排序中间的就是水王,而后,加大难度,我觉得这种思维正是我们在编程过程中应该具备的,先实现基本功能,再优化代码。然后说说这道题目,开始绞尽脑汁都没有想到,后来老师说可以采用“消消”的方法,恍然大悟...再实现时却不是那么回事,我发现面对不同的情况消得对象不同,比如“1,1,1,1,2,2,2”和“1,2,1,2,1,2,1”就不同,后来又跟小伙伴商量,探讨,查资料,才找到了分情况的办法,锻炼了我们的思维能力。

原文地址:https://www.cnblogs.com/yuanyajiao/p/4448667.html