課堂練習之《三個水王》

2022-05-11 12:54:13 字數 1340 閱讀 3618

實驗題目

隨著論壇的發展,管理員發現水王沒有了,但是統計結果表明,有三個發帖很多的id。據統計他們的發帖數量超過了1/4,你能從發帖列表中快速找到他們嗎?

實驗思路

跟上一次一樣,只不過是計數器由乙個變為了三個,定義陣列表示它們,由於據統計他們的發帖數量超過了1/4,可將每個水桶id都與其它水軍id進行抵消最後剩下的就是三個水王,將前三個不同水軍id置為水桶id,開始抵消計數,「水王」中抵消後數量剩餘為0的即被淘汰,用乙個最新的水軍id繼續進行抵消,最後剩下的即為水桶id。

**實現

1 #include 2

using

namespace

std;34

intmain()5;

8int shuiw=id[0]; //

預設水王為第乙個id

9int length=30;10

int idnum[3]=;

11int id[3]=;

12 cout <

水王id列表為

"<

13for(int i=0;i//

輸出id列表

1417 cout<

18for(int i=0;i)

1925

else

if(idnum[1]==0 && id[i]!=id[0] && id[i]!=id[2]) //

第二個水王

2630

else

if(idnum[2]==0 && id[i]!=id[0] && id[i]!=id[1

])31

35else

if(id[i]!=id[0] && id[i]!=id[1] && id[i]!=id[2]) //

相互抵消,最後抵消為零淘汰,更換新的id作為水王

3641

else

if(id[i]==id[0

])42

45else

if(id[i]==id[1

])46

49else

if(id[i]==id[2

])50

53}54 cout<

第乙個水王的id是:

"<0]<

55 cout<

第二個水王的id是:

"<1]<

56 cout<

第三個水王的id是:

"<2]<

57return0;

58 }

執行截圖

課堂練習 找水王

一 題目及題目要求 二 設計思路 1 把帖子列表,抽象為乙個一維陣列arr num 輸入長度length為id總數,每個陣列元素為乙個id。2 再設定乙個迴圈,按照順序來依次兩兩比較,如果作者id相同則保留,如果作者id不同則消除。3 最後剩下id即為水王id 三 源程式 includeusing ...

課堂練習 找「水王」

一 題目要求 現有乙個灌水論壇,資訊學院的學生都喜歡在上面交流灌水。傳說在論壇上有乙個 水王 它不但喜歡發帖,還會回覆其他id發的每個帖子。坊間風聞該 水王 發帖數目已超過了帖子數目的一半。二 設計思路 本題要求時間複雜度是o n 我們可以設定乙個計數器flag,和乙個變數shuiwang存放當前的...

課堂練習 找水王

題目 設計思想 最簡單的思路就是 統計每乙個id出現的次數,然後找出出現最多的id就是水王。第二種更優的思路就是 利用水王發帖次數大於一半,然後兩兩一消,從第乙個數開始,如果等於它的下一位,number 1,如果不等於,number 1,不等於相當於把這兩個帖子都刪除,直接從這兩個的後乙個開始。最後...