n只猴子选大王,选举方法如下:所有猴子按1、2、……n的顺序围坐一圈,从第1个猴子开始报数,报到m的退出圈子。如此循环报数,直到圈中只剩下一只猴子,即为大王,请编程实现。
时间: 2023-05-20 12:01:09 浏览: 21
以下是一个可能的实现:
```python
def monkey_king(n, m):
monkeys = list(range(1, n+1))
i = 0
while len(monkeys) > 1:
i = (i + m - 1) % len(monkeys)
monkeys.pop(i)
return monkeys[0]
n = 10
m = 3
print("大王是第", monkey_king(n, m), "只猴子")
```
这个程序使用一个列表来表示圈中的猴子,每次循环中,找到下一个要退出的猴子的索引,然后将其从列表中删除。最后,列表中只剩下一只猴子,即为大王。
相关问题
java n只猴子选大王,选举方法如下:所有猴子按1、2、……n的顺序围坐一圈,从第1个猴子开始报数,报到m的退出圈子。如此循环报数,直到圈中只剩下一只猴子,即为大王
这是一个经典的约瑟夫问题,可以使用递归或循环来解决。以下是使用循环的解决方案:
```java
public static int findMonkeyKing(int n, int m) {
int king = 0;
for (int i = 2; i <= n; i++) {
king = (king + m) % i;
}
return king + 1;
}
```
其中,n表示猴子的数量,m表示报数的间隔。函数返回最后一只猴子的编号,即为大王的编号。
用Java n只猴子选大王,选举方法如下:所有猴子按1、2、……n的顺序围坐一圈,从第1个猴子开始报数,报到m的退出圈子。如此循环报数,直到圈中只剩下一只猴子,即为大王,请编程实现。
好的,这是一个经典的约瑟夫问题,可以使用链表来模拟猴子围成的圈。以下是Java代码实现:
```
import java.util.*;
public class MonkeyKing {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入猴子的数量n:");
int n = sc.nextInt();
System.out.print("请输入报数的数字m:");
int m = sc.nextInt();
sc.close();
LinkedList<Integer> monkeys = new LinkedList<>();
for (int i = 1; i <= n; i++) {
monkeys.add(i);
}
int count = 1;
while (monkeys.size() > 1) {
int monkey = monkeys.removeFirst();
if (count % m != 0) {
monkeys.addLast(monkey);
}
count++;
}
System.out.println("大王是第" + monkeys.getFirst() + "只猴子。");
}
}
```
这个程序可以接受用户输入猴子的数量n和报数的数字m,然后使用LinkedList来模拟猴子围成的圈。每次从链表头部取出一个猴子,如果它的报数不是m的倍数,就把它放到链表尾部,否则就把它从链表中删除。最后剩下的那只猴子就是大王。