标签:
问题描述:
在上一次练习的基础上,大水王消失了,出现了3个小水王,且每个水王发帖的数量都超过1/4.找出3水王
解决思路:
这1次我们可以通过六个变量来推导出三水王,每两个代表一个水王,其中一个表示 ID,另一个用来使用消除法抵消次数,因为每个水王发帖量都超过1/4,所以一遍运行下来,三水王的ID出现次数都不会被抵消
#include<iostream>
#include<string>
using namespace std;
int main()
{
string tieba[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "W", "V" };
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;
}
运行结果截图:
标签:
原文地址:http://www.cnblogs.com/X-knight/p/5557826.html