一、设计思路
在上次的基础上,将计数器增加到三个,每一个计数器计数一个水王,并用三个变量标记三个水王。因此每一次都要三个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型。