天天看點

随堂練習--找水王2

問題描述:

在上一次練習的基礎上,大水王消失了,出現了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;
}      

 運作結果截圖: