一.题目
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二.设计思路
和之前的博客的找水王的思路类似,只不过这次变成了找三个而已,利用帖子的数量都超过了四分之一,将不一样的减一,一样的加一。
三.源代码
// 水桶.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iostream.h> #define max 50 //ID数组的最大值 /*ID号的输入*/ int input(int ID[]) { int length; cout<<"请输入ID的数量:"; cin>>length; cout<<"请输入ID:"<<endl; for(int i=0;i<length;i++) //ID号的输入 { cin>>ID[i]; } return length; //返回值是该ID数组的长度 } /*寻找水桶*/ void searchst(int ID[],int length,int st[]) { int Count[3]; //三个计数器 Count[0]=Count[1]=Count[2]=0; //给Count数组赋初值 for(int i=0;i<length;i++) //遍历一遍ID数组 { if(Count[0]==0) //若计数器为0,则相应的水桶=当前的ID,且相应的Count=1 { st[0]=ID[i]; Count[0]=1; } else if(Count[1]==0) { st[1]=ID[i]; Count[1]=1; } else if(Count[2]==0) { st[2]=ID[i]; Count[2]=1; } else if(st[0]==ID[i]) //若st与ID相等,则相应的计数器加一 { Count[0]++; } else if(st[1]==ID[i]) { Count[1]++; } else if(st[2]==ID[i]) { Count[2]++; } else //若当前的ID与st都不相等,则三个计数器都减一 { Count[0]--; Count[1]--; Count[2]--; } } } int main() { int st[3]; int ID[max]; searchst(ID,input(ID),st); //调用函数寻找水桶 cout<<"水桶是:"<<endl; cout<<"\t(1)"<<st[0]<<endl<<"\t(2)"<<st[1]<<endl<<"\t(3)"<<st[2]<<endl; return 0; }
四.结果及截图
五.心得
刚开始的时候以为在给数组st初始化时需要将不同的三个值赋给它,后来在调试的时候发现,不管是不是一样,结果都是一样的。