日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 有趣的囚犯问题

發布時間:2023/12/8 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 有趣的囚犯问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個監獄中有n個囚犯,每個犯人一個單獨的房間,犯人之間不能進行通訊。
監獄規定每天可以有一個犯人出來放風,并且犯人在往返住所的過程中不能和其他犯人進行聯系。
放風的操場上有一盞燈,犯人可以隨意的進行開閉。
一天監獄長對犯人們說:“如果你們每個人都至少放風一次,并向我匯報,我可以放你們出去,但是如果你們說謊的話,你們將永遠待下去"
監獄長給犯人10分鐘的討論時間。

問題:使用程序來實現確保每一個犯人都放風了。


解題思路:
因為操場有一盞燈,所以,可以找一個犯人隊長,來記錄放風的人。
隊長僅僅負責關燈,其他犯人負責開燈。
當隊長關一次燈就記錄一次
其他犯人僅僅開一次燈,(比如第一次出來開燈,第二次再出來就不要開燈了)
當隊長再次出來發現燈不再亮,那么同樣也就確定了犯人的數量。


# -*- coding:utf-8 -*- import numpy as np#---------------------------------------------------------------------- def prison(prisoners): turn_on = [False] * prisoners # 設置開燈的次數monitor = prisoners - 1 # 將班長從犯人的數量中去除num = 1 # 定義計數器lamp = False # 剛開始的等是關閉的while num < prisoners: # 如果記載的數量小于每個犯人的數量lamp,num = select(prisoners,monitor,turn_on,lamp,num) print("All prisoners get free") #---------------------------------------------------------------------- def select(prisoners,monitor,turn_on,lamp,num):luck = np.random.randint(0,prisoners) # 定義隨機開燈的人print("luck",luck)if luck == monitor: # 如果放風的人是班長,開始判斷燈是否是亮的,如果燈是亮的,則計數器+1,并將燈關掉if lamp:num += 1lamp = Falseelse: # 如果放風的不是班長,并且燈是滅的,則將燈開啟,如果燈是亮的則不管if not lamp:if not turn_on[luck]:lamp = Trueturn_on[luck] == Truereturn lamp,num if __name__ == "__main__":prison(4) # 假設總共有四個犯人

總結

以上是生活随笔為你收集整理的Python 有趣的囚犯问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。