問題描述:
在上一次練習的基礎上,大水王消失了,出現了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;
}
運作結果截圖: