找水王問題

2022-08-21 01:36:11 字數 810 閱讀 9700

設計思路

起初看到這道題第乙個想法就是先排序再找出最中間乙個id,但是老師要求時間複雜度是o(n),所以這個思路被放棄。

高長志同學提出了另一種思路。由於水王的id出現的次數佔總數的一半,所以從頭遍歷一遍,先存入第乙個id,依次與後面的id比較,遇到相同的id,計數器加1;遇到不同的id,計數器減1,當計數器等於0時,證明前面出現的id都是成對的,而且可以同時消去,再存入當前的id,依次迴圈。迴圈到最後剩下的id就是水王。

源程式**

1 #include 2

using

namespace

std;34

void

main()512

int a=0,n=0;13

for (i=0;i<10;i++)

1420

else

2126

else

27 n=n-1;28

}29}30 cout<

水王是:

"31 }

執行結果截圖

程式設計總結

這個問題要求程式設計者換一種不同的思路,不能用平常的思路來思考。不同的題目適合不同的數學模型,多培養發散式思維,不能固守一種想法。

個人專案找水王

一 題目要求 二 設計思想 水王問題就是根據消消樂遊戲的乙個變形,消消樂是消除相同的圖案,而找出水王則是刪掉相鄰的不同的id,由於 水王 發帖數目超過了帖子數目的一半,這樣剩下的id一定是水王的id。這樣就滿足了時間複雜度為o n 的要求。三 程式 includevoid main 假設的id號 i...

隨堂練習 找水王2

問題描述 在上一次練習的基礎上,大水王消失了,出現了3個小水王,且每個水王發帖的數量都超過1 4.找出3水王 解決思路 這1次我們可以通過六個變數來推導出三水王,每兩個代表乙個水王,其中乙個表示 id,另乙個用來使用消除法抵消次數,因為每個水王發帖量都超過1 4,所以一遍執行下來,三水王的id出現次...

個人專案4 找水王

設計思想 遍歷一遍id列表,進行兩兩比較 如兩個id不同就都刪掉 如果相同,出現這個id的次數加一 水王的帖子超過一半,遍歷到最後剩下的只有水王的id 實現資料 截圖 實現 include using namespace std int find int id,int n else else nti...