一、题目
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二、设计思路
做过找一个水王的的题目,这次找的是三个水王。
1、可以对帖子进行统计,数量最多的三个帖子为水王,但是这需要特别大的空间复杂度,不适用。
2、既然三个水王都大于四分之一,那么,一次消掉4个不同的帖子,最后一定会剩下不同数量的三个水王的帖子,
三、源代码
1 #include<iostream.h> 2 int main() 3 { 4 int ID[10]={1,2,3,4,1,2,3,1,2,3}; 5 int ID_NULL;//定义一个不存在的ID 6 int shui[3]; 7 int flag[3]; 8 int i; 9 shui[0]=shui[1]=shui[2]=0; 10 flag[0]=flag[1]=flag[2]=ID_NULL; 11 for(i=0;i<10;i++) 12 { 13 if(ID[i]==flag[0]) 14 { 15 shui[0]++; 16 } 17 else if(ID[i]==flag[1]) 18 { 19 shui[1]++; 20 } 21 else if(ID[i]==flag[2]) 22 { 23 shui[2]++; 24 } 25 else if(shui[0]==0) 26 { 27 shui[0]=1; 28 flag[0]=ID[i]; 29 } 30 else if(shui[1]==0) 31 { 32 shui[1]=1; 33 flag[1]=ID[i]; 34 } 35 else if(shui[2]==0) 36 { 37 shui[2]=1; 38 flag[2]=ID[i]; 39 } 40 else 41 { 42 shui[0]--; 43 shui[1]--; 44 shui[2]--; 45 } 46 } 47 cout<<"小水王是:"<<endl; 48 cout<<flag[0]<<" "<<flag[1]<<" "<<flag[2]<<endl; 49 return 0; 50 }
四、实验截图
五、实验总结
经过锻炼或者说老师的引导,这次的设计思路在课上就完成了,经过我和同学的讨论,他们都不认同我的,因为他们说不清楚怎么实现一次消除四个。我也是感到迷惑,初级的学习者在编写程序的时候大多数是建立在我们的能力基础上的,这是不可避免的。但是是不是也应该跳出我们是编程者去考虑一个思路呢。