软件工程随堂小作业——寻找“水桶”(C++)

一、设计思想

  思路与寻找一个水王相似,这次只是计数器和嫌疑人变量都设置为数组。每次选取一个ID与三个嫌疑人比较,若有相同则计数;若三个都不相同,则三个计数器都减一。若减为0,则从新赋值给嫌疑人。

二、源代码

 1 // 水桶.cpp : Defines the entry point for the console application.
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "iostream.h"
 6 #define MAXSIZE 30
 7 
 8 void FindWater(int ID[], int len,int water[])
 9 {
10     int counter[3];                    //计数器
11     counter[0]=counter[1]=counter[2]=0;
12     water[0]=water[1]=water[2]=-1;    //初始化嫌疑人列表
13     for(int i=0;i<len;i++)
14     {
15         if(counter[0]==0)            //先赋值
16         {
17             counter[0]++;
18             water[0]=ID[i];
19         }
20         else if(counter[1]==0)
21         {
22             counter[1]++;
23             water[1]=ID[i];
24         }
25         else if(counter[2]==0)
26         {
27             counter[2]++;
28             water[2]=ID[i];
29         }
30         else if(ID[i]==water[0])    //如果counter为0,重新赋值
31         {
32             counter[0]++;
33         }
34         else if(ID[i]==water[1])
35         {
36             counter[1]++;
37         }
38         else if(ID[i]==water[2])
39         {
40             counter[2]++;
41         }
42         else                        //如果与三个嫌疑人的ID都不同的话,则三个计数器都自减一,直到counter为0
43         {
44              counter[0]--;
45              counter[1]--;
46              counter[2]--;
47          }
48     }
49 }
50 
51 int main(int argc, char* argv[])
52 {
53     int ID[MAXSIZE];                //发帖记录表
54     int num,WaterKing[3];            //发帖数目、水桶
55     cout<<"请输入帖子的数量:";
56     cin>>num;
57     cout<<"请输入发帖ID:";
58     for(int i=0;i<num;i++)
59     {
60         cin>>ID[i];
61     }
62     FindWater(ID,num,WaterKing);
63     cout<<"水桶是:";
64     for(i=0;i<3;i++)
65     {
66         cout<<WaterKing[i]<<" ";
67     }
68     cout<<endl;
69     return 0;
70 }

三、实验截图

四、心得体会

  一开始,我把问题细化了,以为选取的三个ID必须互不相同,把程序写的很乱,复杂度也不是O(n2),最后也没调试成功。后来我在网上搜索了一下,发现因为他们各自都发帖超过了1/4,所以禁得起抵消,所以可以没有附加的判断条件。于是我就把嵌套的ifelse都给删了,整理了一下就完成了。

  算法吧,还是要从逻辑思维和数学出发才能更好地优化代码。

原文地址:https://www.cnblogs.com/JJJanepp/p/4458038.html