一群猴子要选大王,遴选的方法是:让M只候选猴子围成一圈,从某位置起顺序编号为0∼M−1号。从第0号开始报N个数字,每轮从0报到N−1,凡报到N−1的猴子即退出候选,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。问猴王是原来第几号猴子? 输入格式: 在一行中输入两个整数M和N,分别代表猴群数量和报数数。整数与整数之间用空格间隔。 输出格式: 在一行中输出一个数,表示当选猴子编号。 输入样例: 9 2 输出样例: 2
时间: 2023-05-20 13:07:05 浏览: 169
猴王选举问题可以使用约瑟夫问题的思路来解决。具体来说,我们可以使用一个循环链表来模拟猴子围成一圈的过程,每次从当前位置开始报数,报到第N个猴子就将其从链表中删除,然后从下一个猴子开始重新报数,直到只剩下一个猴子为止。
以下是使用Python实现的代码:
```python
class Monkey:
def __init__(self, id):
self.id = id
self.next = None
def select_monkey(m, n):
# 初始化猴子链表
head = Monkey(0)
p = head
for i in range(1, m):
p.next = Monkey(i)
p = p.next
p.next = head
# 开始选举
p = head
while p.next != p:
# 报数
for i in range(n - 1):
p = p.next
# 删除猴子
q = p.next
p.next = q.next
q.next = None
p = p.next
return p.id
# 读入输入数据
m, n = map(int, input().split())
# 进行猴王选举
king = select_monkey(m, n)
# 输出结果
print(king)
```
对于输入样例9 2,程序的输出结果为2。
阅读全文