
热土豆(约瑟夫问题)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