小水王2
1、实验题目
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
2、实验思路
我觉得这个题听考验我们解题的思路,刚开始只有一个打水王时还稍微简单一点,就是两个两个比较,相同则保留,不同则删除;这一次三个小水王的问题,一开始一点思路也没有,后来在查询了好多资料后,发现其实可以用同样的方法去解决这个问题,上一次是两个比较,这一个应定义三个标记,分别标记三个小水王,然后记录它们的累积次数,然后遍历整个列表,每处理一个ID,若与已标记的小水王中的某一个相同,则次数加一,若与三个都不同,则说明找到了四个互不相同的ID,将三个减一,也就相当于“删除了四个不同ID”,若某一个次数等于0,则重新开始寻找。
3、实验代码
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int length,i,id; 7 int shuiwang [3]={0}; 8 int count[3] ={0}; //标记三个小水王 9 int ID[10000]; 10 int water[10000]; 11 cout << "请输入帖子的总个数:";//定义帖子的长度,即数组的个数 12 cin >> length; 13 cout << "请依次输入每个帖子的发布者的ID:" << endl;//输入每个帖子的Id 14 for (i = 0; i < length; i++) 15 { 16 cin >> id; 17 ID[i] = id; 18 } 19 for(int i=0;i<length;i++)//查找三个小水王 20 { 21 if(ID[i]==shuiwang[0]) 22 { 23 count[0]++; 24 } 25 else if(ID[i]==shuiwang[1]) 26 { 27 count[1]++; 28 } 29 else if(ID[i]==shuiwang[2]) 30 { 31 count[2]++; 32 } 33 else if(count[0]==0) 34 { 35 count[0]=1; 36 shuiwang[0]=ID[i]; 37 } 38 else if(count[1]==0) 39 { 40 count[1]=1; 41 shuiwang[1]=ID[i]; 42 } 43 else if(count[2]==0) 44 { 45 count[2]=1; 46 shuiwang[2]=ID[i]; 47 } 48 else 49 { 50 count[0]--; 51 count[1]--; 52 count[2]--; 53 } 54 } 55 56 cout<<"三个小水王的ID分别是:"<<endl; 57 for(int i=0;i<3;i++) 58 { 59 cout<<shuiwang[i]<<" "; 60 } 61 cout<<endl; 62 return 0; 63 }
4、实验截图
5、时间记录日志(单位:h):
日期 | 开始时间 | 结束时间 | 中断时间(min) | 净时间(min) | 活动 | 备注 |
星期一 | 14:00 | 15:50 | 10(课间) | 100 | 听课 | 软件工程 |
星期二 | 20:00 | 22:00 | 0 | 120 | 编程 | 水王2 |
星期三 | 15:00 | 17:00 | 10(休息) | 120 | 看书 | 人月神话 |
星期四 | 14:00 | 15:50 | 10(课间) | 100 | 上机 | 水王2 |
20:00 | 21:30 | 10(休息) | 80 | 编程 | 水王2 | |
星期五 | 18:30 | 19:10 | 10(休息) | 30 | 发博客 | 水王2 |