课堂练习-找水桶(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 }

三、结果截图

四、实验总结

  本次实验我学到的最多的就是要学会类推,当我掌握一种方法的时候,要学会运用它去解决一系列类似的问题。首先要找到两个问题的相同点,看能否做相类似的处理,在分析后,如果能,再找到它们的不同之处,针对不同之处做出相应的修改,问题应该就能解决。

原文地址:https://www.cnblogs.com/gaoyang110/p/4458152.html