还是上次消除的思想,我定义了三个计数器和三个初始嫌疑水王,比较三个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;
}

原文:http://www.cnblogs.com/tyyhph/p/5521101.html