一、设计思路
在上次的基础上,将计数器增加到三个,每一个计数器计数一个水王,并用三个变量标记三个水王。因此每一次都要三个ID三个ID的判断,如果有上一次的水王,那么上一次的
水王出现次数加一,如果都没有出现,那么上次出现的水王次数减一。
二、代码
//Fing the three kings of shui,the amount of every king is at least 1/3 of sum. 20133048 黄山成 2016/5/27 #include<iostream> using namespace std; void Find_King(int shui_ID[],int amount_ID)//寻找水王 { int king_1=0,king_2=0,king_3=0;//三个水王变量 int Counts_1=0,Counts_2=0,Counts_3=0;//没一个计数器用来计数三个水王的出现次数 int i=0; for(i=0;i<amount_ID;i++) { if(Counts_1==0 && shui_ID[i]!=king_2 && shui_ID[i]!=king_3)//第一个水王的默认ID { Counts_1=1; king_1=shui_ID[i];//第一个水王出现一次 } else if(Counts_2==0 &&shui_ID[i]!=king_1 && shui_ID[i]!=king_3)//第二个水王的默认ID { Counts_2=1; king_2=shui_ID[i]; } else if(Counts_3==0 &&shui_ID[i]!=king_1 && shui_ID[i]!=king_2)//第三个水王的默认ID { Counts_3=1; king_3=shui_ID[i]; } else if(shui_ID[i]!=king_1 && shui_ID[i]!=king_2 && shui_ID[i]!=king_3)//如果下面三个ID都不是上面三个标记的水王id,那么意味着水王没有出现,出现次数减一 { Counts_1--; Counts_2--; Counts_3--; } else if(shui_ID[i]==king_1)//第一个水王又出现一次,出现次数加一 { Counts_1++; } else if(shui_ID[i]==king_2) { Counts_2++; } else if(shui_ID[i]==king_3) { Counts_3++; } } cout<<king_1<<" "<<king_2<<" "<<king_3<<endl; } int main() { int ID[10]={123,243,323,123,323,243,323,243,123,4123}; //string ID[10] = {"波风水门","MVP","波风水门","波风水门","666666一水到底","MVP","要火火","MVP","666666一水到底","666666一水到底"}; cout<<"ID: "<<endl; for(int i=0;i<10;i++) { cout<<ID[i]<<" "; } cout<<endl; cout<<"The small kings of shui are:"<<" "<<endl; Find_King(ID,10); return 0; }
三、截图
四、总结
这次的寻找小水王,思想和上次相同,但是需要增加到三个计数器,不过代码没有实现string 类型的ID,直接用的是int型。