用Java n只猴子选大王,选举方法如下:所有猴子按1、2、……n的顺序围坐一圈,从第1个猴子开始报数,报到m的退出圈子。如此循环报数,直到圈中只剩下一只猴子,即为大王,请编程实现。
时间: 2023-05-20 11:01:10 浏览: 58
好的,这是一个经典的约瑟夫问题,可以使用链表来模拟猴子围成的圈。以下是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的倍数,就把它放到链表尾部,否则就把它从链表中删除。最后剩下的那只猴子就是大王。