熱土豆(約瑟夫問題)python
問題描述:算法
小故事——約瑟夫問題
微信
算法一(逆向思惟)
數據結構
利用隊列實現熱土豆問題,參加遊戲的人名列表name_list,每一次傳遞土豆的次數num,返回最後剩下的人名便可
flex
算法(利用隊列實現)spa
-
反向思惟:土豆不動,人動 -
隊首出隊再入隊:表明傳遞了一次 -
傳遞num次後,隊首的人名直接移除
class Queue(): """隊列""" def __init__(self): self.items = []
def dequeue(self): return self.items.pop()
def enqueue(self, item): self.items.insert(0, item)
def size(self): return len(self.items)
def isEmpty(self): return self.items == []
def hotPotato(name_list, num): """逆向思惟:土豆不動,人動""" name_queue = Queue() # 存儲人名 for name in name_list: """將人名排入隊列中""" name_queue.enqueue(name)
while name_queue.size() > 1: for i in range(num): name_queue.enqueue(name_queue.dequeue()) # 完成了一次離隊入隊(傳遞) i += 1
name_queue.dequeue()
return name_queue.dequeue()
算法二(正向思惟).net
def hotPotato2(name_list, num): """正向思惟:人不動,土豆動""" remainder = 0 # remainder對應的就是索引 while len(name_list) > 1: remainder += num % len(name_list) # remainder對應的就是索引 if remainder >= len(name_list): remainder = remainder - len(name_list) del name_list[remainder] return name_list.pop()
別忘了點個在看哦!轉發那就太好了!code
本文分享自微信公衆號 - 小楊的python之路(gh_6ba152d49331)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。orm