在上一次练习的基础上,大水王消失了,出现了3个小水王,且每个水王发帖的数量都超过1/4.找出3水王
思路:
上次作业的找水王是通过设两个变量使用消除法来寻找出大水王,以此类推,这一次我们可以通过六个变量来推导出三水王,每两个代表一个水王,其中一个表示ID,另一个用来使用消除法抵消次数,因为每个水王发帖量都超过1/4,所以一遍运行下来,三水王的ID出现次数都不会被抵消。
对应代码:
#include<iostream> #include<string> using namespace std; int main() { string tieba[]={"wang","xiaozi","xiaozi","wang","hz","hc","hz","asdf","wang","xiaozi","hz","hz","sdf","wang","hz","xiaozi"}; int court[3]={0}; //用于计数 int ID[3]={0,1,2}; //记入ID /* 使用消去法,读入一个ID,与ID数组相比较。 1、ID数组中含有对应ID则相应court+1; 2、如果对应数组ID都没有与之对应,那么查看是否有ID对应court==0,如果有则替换对应ID; 3、条件一和条件二都没有满足则,court数组都减1; */ for(int i=0;i<sizeof(tieba)/sizeof(tieba[0]);i++) { if(tieba[ID[0]]==tieba[i]) { court[0]++; }else if(tieba[ID[1]]==tieba[i]) { court[1]++; }else if(tieba[ID[2]]==tieba[i]) { court[2]++; }else if(court[0]==0) { ID[0]=i; }else if(court[1]==0) { ID[1]=i; }else if(court[2]==0) { ID[2]=i; }else { court[0]--; court[1]--; court[2]--; } } for(int i=0;i<3;i++) { cout<<"第 "<<i+1<<" 个水王是:"<<tieba[ID[i]]<<endl; } return 0; }
结果: