演算法 根據乙個開關確定一百人是否都進入過房間

2021-08-08 15:50:43 字數 771 閱讀 2800

該演算法**於我研究生課堂上,老師提出的一討論題:

假設教室有一開關,現有100人,他們必須設計乙個規則,利用該開關確定所有的人都進入過教室,所有人在設計好規則後都不允許再接觸共享資訊,且每個人被叫入教室的時機和次數都是隨機的。

場景一:假設教室的開關的狀態一開始為off(兩種狀態,off和on)

思路:從100個人中選擇乙個人進行計數,並且只有計數的人才能關閉按鈕,其他非計數人如果進入該教室,有三種選擇:

1.如果發現開關處於on狀態就什麼也不做直接出去

2.如果發現開關處於off狀態且自己為第一次進入教室則將開關開啟

3.如果發現開關處於off狀態且自己為非第一次進入教室則直接離開教室

最終直至計數人確定已關閉由其他人開啟的99次開關後,報告所有人已全部進入過房間。

場景二:假設教室的開關一開始狀態不知

思路:仍然從100個人中選擇乙個人進行計數,並且只有計數的人才能關閉按鈕,此時其他非計數的人需都按兩次開關,有種選擇:

1.如果發現開關處於on狀態就什麼也不做直接出去

2.如果發現開關處於off狀態且自己為第一次進入教室則將開關開啟

3.如果發現開關處於off狀態且自己為第二次進入教室則將開關開啟

4.如果發現開關處於off狀態且自己已兩次進入教室則直接離開教室

最終直至計數人確定已關閉198次開關後,報告所有人已全部進入過房間。

該演算法為課堂小遊戲,覺得這個比較有趣,就把其記錄下來,一開始大家討論的時候都說要七個開關,老師說乙個的時候大家都炸了,不過如果真只有乙個開關,這個遊戲得花不少時間。

判斷乙個整數是否為素數 確定乙個整數是否是2的冪

給定乙個整數,編寫乙個函式來確定它是否是2的冪。範圍 1 2 31 1 測試用例 輸入 16,輸出 true 因為 2 4 16 輸入 18,輸出 false.最明顯的暴力方法就是除以2,然後檢查它是否達到1。var poweroftwo function n 由於給出的範圍在0 2 31 1之間,...

演算法 判斷乙個鍊錶是否有環

解題思路 定義兩個指標fast和slow,其中fast是快指標,slow是慢指標,二者的初始值都指向煉表頭,slow每前進一步,fast每次前進兩步,兩個指標同時向前移動,快指標每移動一次都要和慢指標比較,直到當快指標等於慢指標為止,就證明這個鍊錶是帶環的單向鍊錶,否則,證明這個鍊錶是不帶環的迴圈鍊...

根據當前日期,計算乙個人的年齡

格式化日期用calender,月份是從0開始算起,星期是行星期天開始算起,星期天為0 給出乙個人的出生日期,計算乙個人的年齡。先獲得當前的日期,用當年的年份減去出生的年份得到乙個差值a,在用出生的日期,加上a,得到新的日期,然後那新得到的日期與當前日期比較,如果在當前日期的前邊,則a就是該人的年齡,...