课堂练习-找水桶(4.24)
题目:
三人行设计了一个灌水论坛。随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
一、设计思想
课上老师一直强调与上次找水王的方法类似,虽然课上没能想出方法,但课下通过思考和观察找水王的程序,只需在原来基础上从一次消去两个,变为一次消去四个;三个水桶可以说是等价的,其数量均超过四分之一,所以一次消去四个后剩下的必然是三个水桶。需要变的只是从存一个水王到存三个水桶,变化方法与上次程序类似。因此只需对上次的程序复制粘贴,再稍稍修改一下即可。
二、源代码
1 #include<iostream.h> 2 int main() 3 { 4 int i,j,k=1,q=1,p=1,shuitong1,shuitong2,shuitong3; 5 int a[100]; 6 cout<<"请输入id数:"; 7 cin>>j; 8 cout<<"请输入id:"; 9 for(i=0;i<j;i++) 10 { 11 cin>>a[i]; 12 } 13 shuitong1=a[0]; 14 shuitong2=a[1]; 15 shuitong3=a[2]; 16 for(i=3;i<j;i++) 17 { 18 if(shuitong1!=a[i]&&shuitong2!=a[i]&&shuitong3!=a[i]) 19 { 20 k=k-1; 21 q=q-1; 22 p=p-1; 23 if(k<=0&&q>0&&p>0) 24 { 25 shuitong1=a[i+1]; 26 k=1; 27 i++; 28 } 29 else if(k>0&&q<=0&&p>0) 30 { 31 shuitong2=a[i+1]; 32 q=1; 33 i++; 34 } 35 else if(k>0&&q>0&&p<=0) 36 { 37 shuitong3=a[i+1]; 38 p=1; 39 i++; 40 } 41 else if(k<=0&&q<=0&&p>0) 42 { 43 shuitong1=a[i+1]; 44 k=1; 45 shuitong2=a[i+2]; 46 q=1; 47 i=i+2; 48 } 49 else if(k<=0&&q>0&&p<=0) 50 { 51 shuitong1=a[i+1]; 52 k=1; 53 shuitong3=a[i+2]; 54 p=1; 55 i=i+2; 56 } 57 else if(k>0&&q<=0&&p<=0) 58 { 59 shuitong2=a[i+1]; 60 q=1; 61 shuitong3=a[i+2]; 62 p=1; 63 i=i+2; 64 } 65 else if(k<=0&&q<=0&&p<=0) 66 { 67 shuitong1=a[i+1]; 68 k=1; 69 shuitong2=a[i+2]; 70 q=1; 71 shuitong3=a[i+3]; 72 p=1; 73 i=i+3; 74 } 75 } 76 else if(shuitong1==a[i]&&shuitong2!=a[i]&&shuitong3!=a[i]) 77 { 78 shuitong1=a[i]; 79 k=k+1; 80 } 81 else if(shuitong1!=a[i]&&shuitong2==a[i]&&shuitong3!=a[i]) 82 { 83 shuitong2=a[i]; 84 q=q+1; 85 } 86 else if(shuitong1!=a[i]&&shuitong2!=a[i]&&shuitong3==a[i]) 87 { 88 shuitong3=a[i]; 89 p=p+1; 90 } 91 92 } 93 cout<<"水桶id分别为:"<<shuitong1<<","<<shuitong2<<","<<shuitong3<<endl; 94 return 0; 95 }
三、结果截图
四、实验总结
本次实验我学到的最多的就是要学会类推,当我掌握一种方法的时候,要学会运用它去解决一系列类似的问题。首先要找到两个问题的相同点,看能否做相类似的处理,在分析后,如果能,再找到它们的不同之处,针对不同之处做出相应的修改,问题应该就能解决。