课堂练习之检测水军(拓展)
一、题目
三人行设计了一个灌水论坛。随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二、设计思路
上一次是找出一个水军,这个水军发帖数超过了总帖数一半,这一次是找三个水军,这三个水军每一个人的帖子数都超过了总帖数的1/4,我们只需要在上一次的基础上进行改进就可以了,上一次是挨着消去两个,这次挨着消去四个,剩下最后的三个就是水军。
三、源代码
1 // shuitong.cpp : Defines the entry point for the console application. 2 //韩雪东 3 4 #include "stdafx.h" 5 #include "iostream.h" 6 int main(int argc, char* argv[]) 7 { 8 9 int i,j=10,k=1,q=1,p=1,id1,id2,id3; 10 int a[10]={1,2,4,3,1,2,3,1,2,3}; 11 id1=a[0]; 12 id2=a[1]; 13 id3=a[2]; 14 for(i=3;i<j;i++) 15 { 16 if(id1!=a[i]&&id2!=a[i]&&id3!=a[i]) 17 { 18 k=k-1; 19 q=q-1; 20 p=p-1; 21 if(k<=0&&q>0&&p>0) 22 { 23 id1=a[i+1]; 24 k=1; 25 i++; 26 } 27 else if(k>0&&q<=0&&p>0) 28 { 29 id2=a[i+1]; 30 q=1; 31 i++; 32 } 33 else if(k>0&&q>0&&p<=0) 34 { 35 id3=a[i+1]; 36 p=1; 37 i++; 38 } 39 else if(k<=0&&q<=0&&p>0) 40 { 41 id1=a[i+1]; 42 k=1; 43 id2=a[i+2]; 44 q=1; 45 i=i+2; 46 } 47 else if(k<=0&&q>0&&p<=0) 48 { 49 id1=a[i+1]; 50 k=1; 51 id3=a[i+2]; 52 p=1; 53 i=i+2; 54 } 55 else if(k>0&&q<=0&&p<=0) 56 { 57 id2=a[i+1]; 58 q=1; 59 id3=a[i+2]; 60 p=1; 61 i=i+2; 62 } 63 else if(k<=0&&q<=0&&p<=0) 64 { 65 id1=a[i+1]; 66 k=1; 67 id2=a[i+2]; 68 q=1; 69 id3=a[i+3]; 70 p=1; 71 i=i+3; 72 } 73 } 74 else if(id1==a[i]&&id2!=a[i]&&id3!=a[i]) 75 { 76 id1=a[i]; 77 k=k+1; 78 } 79 else if(id1!=a[i]&&id2==a[i]&&id3!=a[i]) 80 { 81 id2=a[i]; 82 q=q+1; 83 } 84 else if(id1!=a[i]&&id2!=a[i]&&id3==a[i]) 85 { 86 id3=a[i]; 87 p=p+1; 88 } 89 90 } 91 cout<<"水桶id分别为:"<<id1<<","<<id2<<","<<id3<<endl; 92 return 0; 93 }
四、运行结果
五、心得体会
既然老师出的题目和上一次有关联,就是在上一次的基础上进行了扩展,那么大致的方法还会和上一次大致相同,我们只要在上一次的基础上进行改进就好了。