題目:三人行設計了一個灌水論壇。資訊學院的學生都喜歡在上面交流灌水,傳說在論壇上有一個“水王”,他不但喜歡發帖,還會回複其他ID發的每個文章。坊間風聞該“水王”發帖數目超過了文章數目的一半。
如果你有一張目前論壇的文章(包括回帖)清單,其中文章的作者的ID也在其中,你能快速的找到這個傳說中的水王嗎?
解題思路:根據課堂上的讨論,設計應為時間複雜度為O(n)。采用消除法來對問題求解:相鄰兩個ID若不同即消除,留在最後的一定是水王ID(題目中“發帖數目超過了文章數目的一半”非常重要)。程式中給出的ID賬号假定為10個。
程式代碼:
#include<iostream.h>
int main()
{
int a[10];
cout<<"請輸入10個id賬号:"<<endl;
for (int k=0;k<10;k++)
{
cin>>a[k];
}
int temp=a[0];
int j=1;
for (int i=1;i<10;i++)
{
if(a[i]==a[0])
j++;
else
j--;
if(j==0)
{
temp=a[i+1];
j=1;
}
}
cout<<"水王的賬号id為:"<<temp<<endl;
return 0;
}
程式截圖:

思考總結:
在設計程式中,首先想到的是判斷相鄰倆ID是否相同,以此為首要條件進行程式設計。但是并沒有達到Id相消的效果,結果越做越亂。打破思維之後,考慮到使用計數的方法。以基數為1、第一個ID為基礎,相同累加,不同累減,當其為0時,得出此數相消。在程式的失敗中,又重新加深了C的基礎語言程式設計能力,程式成功後,代碼也并不是想象之中的那麼難。隻是沒有想到恰當的方法。