题目:
在上一次的程序中 信息学院的论坛里面,有一大“水王”不见了。出现了三个小水王,每个人的发帖数都超过了1/4。
思路:
还是上次消除的思想,我定义了三个计数器和三个初始嫌疑水王,比较三个ID,如果不相同,就排除,如果相同,那么计数器加一。嫌疑水王ID都与其它水军ID进行消除最后剩下的就是三个水王。
代码:
#include "iostream" using namespace std; typedef int Type; Type find(Type *shuiwang ,int length) { int Idcou[3]={0,0,0};//计数器初始化为0 int ID[3]={0,0,0}; //水王id初始化为0 for(int i=0;i<length;i++)//找水王 { if(Idcou[0]==0 && shuiwang[i]!=ID[1] && shuiwang[i]!=ID[2]) //三个数两两相比如果不相等则消去 { Idcou[0]=1; ID[0]=shuiwang[i]; } else if(Idcou[1]==0 &&shuiwang[i]!=ID[0] && shuiwang[i]!=ID[2]) { Idcou[1]=1; ID[1]=shuiwang[i]; } else if(Idcou[2]==0 &&shuiwang[i]!=ID[0] && shuiwang[i]!=ID[1]) { Idcou[2]=1; ID[2]=shuiwang[i]; } else if(shuiwang[i]!=ID[0] && shuiwang[i]!=ID[1] && shuiwang[i]!=ID[2]) //四个数若是不想等,则删除这四个数 { Idcou[0]--; Idcou[1]--; Idcou[2]--; } else if(shuiwang[i]==ID[0]) { Idcou[0]++; } else if(shuiwang[i]==ID[1]) { Idcou[1]++; } else if(shuiwang[i]==ID[2]) { Idcou[2]++; } } cout<<"三个小水王分别是:"<<ID[0]<<" "<<ID[1]<<" "<<ID[2]<<endl; return 0; } int main() { Type shuiwang[] ={1,1,1,1,1,1,3,3,3,3,3,45,3,41,2,2,2,2,2,2}; find(shuiwang,20); return 0; }