天天看點

找水王

一.題目:

     三人行設計了一個灌水論壇。資訊學院的學生都喜歡在上面交流灌水,傳說在論壇上有一個“水王”,他不但喜歡發帖,還會回複其他ID發的每個文章。坊間風聞該“水王”發帖數

目超過了文章數目的一半。 如果你有一張目前論壇的文章(包括回帖)清單,其中文章的作者的ID也在其中,你能快速的找到這個傳說中的水王嗎?

二.設計思路

a) 出發點“水王的發帖數目超過了文章數目的一半”,是以水王的名字至少會重複N/2,設定一個數num來記錄一個發帖人名稱的重複次數,num初始化為0;定義一個string shuiWang 來記住水王的名稱。

b) 當一個名稱與後一個名稱相同時,num++;不相同時,num--;當num為0時,将下一個名稱指派給shuiWang。

三.代碼實作

#include<iostream>
#include<string>
using namespace std;
void main()
{
    int shuiNum;
    cout<<"請輸入文章的數目:";
    cin>>shuiNum;
    //動态建立水貼數目的數組,用于存儲每個文章的發帖人
    string *shui = new string[shuiNum];
    //string shui;
    cout<<"請輸入每個文章的發帖人姓名:"<<endl;
    for(int i=0;i<shuiNum;i++)
    {
        cout<<i+1<<": ";
        cin>>shui[i];
    }
    int num=0;           //重複的次數
    string shuiWang=shui[0];  //假定水王是第一個人
    for(int i=0;i<shuiNum-1;i++)
    {
        if(shui[i]==shui[i+1])
            num++;
        else
        {
            if(num==0)  //當num=0時,換人
                shuiWang=shui[i+1];
            else
                num--;
        }
    }
    cout<<"水王是:"<<shuiWang<<endl;
}
      

 運作結果截圖: