|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面是利用Python 3.x 的字典写的,发现当剔除一个猴子,往后数字典还剩下3个值得时候,计数出错了~大婶们请赐教~
1. 求出错原因
2. 求该咋写
- #!/usr/bin/env python
- # coding=utf-8
- #Python: 3.x
- #猴子选大王 规则
- # 1. n只猴子围坐成一个圈,按顺时针方向从1到n编号
- # 2. 从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局
- # 3. 再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王
- def king(m,n):
- dd = {}
- p = 1
- while(p<=m):
- dd[p] = p
- p = p+1
- j = 1
- while(len(dd) >1):
- for k,v in dd.copy().items():
- if(j == n):
- dd.pop(k)
- j = 1
- else:
- j = j+1
- return dd
- print(king(20,5))
复制代码
下面有俩正确的版本,全当学习~~
利用 Python 3.x 列表
- #!/usr/bin/env python
- #--*-- coding: utf-8 --*--
- #Python Version: 3.x
- import copy
- def MonkeyKing(Number, Sep):
- Monkeys = ['猴子-' + str(x) for x in range(1,Number+1)]
- while True:
- if len(Monkeys) == 1:
- return Monkeys
- break
- if len(Monkeys) < Sep:
- n = Sep % len(Monkeys)
- del Monkeys[n-1]
- if n != 0:
- Monkeys = Monkeys[n-1:] + Monkeys[:n-1]
- continue
- for x,y in enumerate(copy.copy(Monkeys), start=1):
- if x % Sep == 0:
- Monkeys.remove(y)
- Monkeys = Monkeys[x-1:] + Monkeys[:x-1]
- break
- print(MonkeyKing(20, 5))
复制代码
利用 Python 2.x 字典
- #!/usr/bin/python
- def king(m,n):
- dd = {}
- p = 1
- while(p<=m):
- dd[p] = p
- p = p+1
- j = 1
- while(len(dd) >1):
- for k,v in dd.items():
- if(j == n):
- del dd[k]
- j = 1
- else:
- j = j+1
- return dd
- print king(20,5)
复制代码
还没仔细分析你的程序。暂时写个简单的。
- def MonkeyKing(Number, Sep):
- n = list(range(Number))#生成一个列表
- s = 0#起点位置
- while len(n) > 1:
- s = (s + Sep -1) % len(n)
- n.pop(s)
- return(n[0])
- print(MonkeyKing(25, 7)+1)#因为是从0开始做列表的,为了符合题意,加1变为1开始
复制代码
|
|