一、题目
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的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 }
四、实验截图
五、实验总结
从上次找一个水王到这次找三个水王,我们可以发现,如果对于一个问题只要找到合适的办法,就可以解决这一类问题的办法,这就要在解决问题时能够做到举一反三,这样我们在遇到类似的问题时就能做到迎刃而解。比如说这两次找水王问题的解决,都发现找n个水王那么着n个水王发帖个数就会超过总帖数的1/(n+1),那么我们就可以总结出找出n个水王时的解决办法。