您的位置:首页 > 其它

课堂练习--找“水王”

2015-04-22 21:03 246 查看
一、题目要求

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

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

二、设计思路

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

三、源代码

#include "stdio.h"
#define N 1000
int main()
{
int arry
,shuiwang,flag,num,i;
printf("请输入ID的个数:");
scanf("%d",&num);
printf("请输入ID:\n");
for(i=0;i<num;i++)
{
scanf("%d",&arry[i]);
}
for(i=flag=0;i<num;i++)
{
if(flag==0)
{
shuiwang=arry[i],flag=1;
}
else
{
if(shuiwang==arry[i])
{
flag++;
}
else
{
flag--;
}
}
}
printf("这个“水王”的ID就是:");
printf("%d\n",shuiwang);
return 0;
}


View Code
四、结果截图



五、实验心得

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