题目
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
请问这个人应该报几才能保证他一定会赢?
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Filename : lean001.py # author by : www.py40.com # n个人,编号为k的人报数 def josephus(n, k, m): result = 'LOSE!!!' queue = (list)(range(1, n+1)) count = k-1 for i in range(0, n+1): if len(queue) != 0: count = (count+m-1)%len(queue) print("out", str(queue[count])) if(queue[count]==m): print("第{}轮就退出了".format(count)) break; del queue[count] else: result = 'WIN!!!'; print("{}结果是{}".format(m,result)) return result; if __name__ == '__main__': for i in range(0,1000): if(josephus(13,4,i))=='WIN!!!': break; |
未经允许不得转载:Python在线学习 » Python-约瑟夫环