趣味演算法題 1

2021-06-21 15:26:12 字數 1016 閱讀 9253

尋找明星

題目描述:有n個人,其中乙個明星和n-1個群眾,群眾都認識明星,明星不認識任何群眾,群眾和群眾之間的認識關係不知道,現在如果你是機械人r2t2,你每次問乙個人是否認識另外乙個人的代價為0(1),試設計一種演算法找出明星,並給出時間複雜度。

解法一:看到題目後,首先想到的是任選其中乙個人作為目標物件,然後詢問剩下的n-1個人。若當前目標不認識其他人,但是其他人認識ta,則目標就是明星,否則,目標不是明星,在選擇其他人作為目標做同樣的詢問。時間複雜度為o(n*n).

解法二: 在解法一中,每次只是做了詢問而沒有記錄相關的資訊,

比如在詢問a和b時,有以下幾種關係:

1) a不認識b, b不認識a。==> a和b都不是明星

2)a認識b, b認識a。==> a和b都不是明星

3) a認識b, b不認識a。==> a不是明星,b可能是明星。

4)a不認識b, b認識a。==> a可能是明星,b一定不是明星

因為每次詢問都可以至少排除乙個物件,因此只需要n-1次詢問即可找到目標。

偽碼如下:

bool recognize( int a, int b );

bool findstar( int array, int n, int &answer )

// 不認識i, 則i肯定就不是明星了

++i; }

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

}} answer = star;

return true;

}

因為原問題中可能不存在明星,因此在最後必須要對所求答案逐一驗證。

分析:在遇到問題時,將問題的規模減小是乙個較好的計算機解題方法。時間複雜度為o( n );

MySQL趣味題 Hankson的趣味題

思路 由於x是b1的約數,所以x的質因子一定也是b1的質因子,我們可以對b1的每個質因子p,分別計算a0,a1,b0,b1分別 包含多少個p.然後討論x可能含有幾個p即可 include include include include include include using namespace ...

python趣味題 python 趣味百題3

等差素數數列 類似7 37 67 97 107 137 167 197這樣由素數組成的數列。素數數列具有項數的限制,一般指素數數列的項數有多少個連續項,最多可以存在多少個連續項 程式設計找出100以內的等差素數數列 思路 1.篩法找出100以內所有素數 2.對於素數list內兩兩組合,構造等差數列a...

趣味百題之趣味猜想

coding utf 8 import sys reload sys sys.setdefaultencoding utf 8 created on wed dec 07 18 43 25 2016 趣味百題之趣味猜想 author onlyyo 1.角谷猜想的內容為 任意給定乙個自然數,若它為偶數...