猴子选大王问题(Monkey King)

  猴子选大王问题: 一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1到m的顺序围坐一圈,

  从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

  经典算法(C#版本)

1         public int King(int M, int N)
2         {
3             //总猴数 M ,数到第 N 个排除。 
4             int k = 0;
5             for (int i = 2; i <= M; i++)
6                 k = (k + N) % i;
7             return ++k;
8         }  
 经典算法(python版本py 2.7)
1 def king(m,n):
2     l,i=range(m),0    #构造list代表猴子,i记录点名的次数,没点名时候记0
3     while len(l)>1:    #当猴子数目大于一个时候
4         k=l.pop(0)      #点到名字的猴子出列
5         i+=1              #点名次数+1      
6         if i%n!=0:      #不是n*x次被点名的猴子站到队伍末尾,等待再次被点名
7             l.append(k)
8     return l[0]+1      #返回猴子的编号 list index默认0开始
 monkeyking特例时候的(python版本 py 2.7)
1 #5只猴一圈,点到第3个时候出圈
2 l=range(5)
3 while (len(l)>1):
4     l.append(l.pop(0))
5     l.append(l.pop(0))
6     l.pop(0)
7 print l[0]+1

 

转载于:https://www.cnblogs.com/hello1123/p/7360145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值