4. 有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输入。
时间: 2024-05-15 17:15:38 浏览: 88
思路:使用一个列表存储所有人的编号,然后使用循环不断地让每个人报数,当报数到达N时,将该人从列表中移除,并记录出圈顺序。接着继续数,直到只剩下一个人为止。
代码如下:
```python
M = int(input("请输入总人数M:"))
N = int(input("请输入报数N:"))
# 初始化编号列表
numbers = list(range(1, M+1))
# 记录出圈顺序的列表
out_order = []
# 当还有人没出圈时,循环报数
while len(numbers) > 1:
# 报数
for i in range(N-1):
# 将第一个人移到最后一个位置
numbers.append(numbers.pop(0))
# 第N个人出圈
out_order.append(numbers.pop(0))
# 输出最后剩下的人和出圈顺序
print("最后剩下的人的编号为:", numbers[0])
print("出圈顺序为:", out_order)
```
示例输出:
```
请输入总人数M:10
请输入报数N:3
最后剩下的人的编号为: 4
出圈顺序为: [3, 6, 9, 2, 7, 1, 8, 5]
```
相关问题
java4. 有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输
入。
思路:模拟约瑟夫环问题,使用一个数组记录每个人的编号,并用一个循环队列来模拟出圈的过程,直到剩下最后一个人为止。
代码实现:
import java.util.Scanner;
public class JosephusRing {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入M:");
int M = scanner.nextInt();
System.out.print("请输入N:");
int N = scanner.nextInt();
int[] nums = new int[M];
for (int i = 0; i < M; i++) {
nums[i] = i + 1;
}
int count = M;
int index = 0;
int[] queue = new int[M];
while (count > 1) {
for (int i = 0; i < N - 1; i++) {
queue[index] = nums[index];
index = (index + 1) % M;
}
System.out.println(nums[index] + " 出圈");
index = (index + 1) % M;
count--;
}
System.out.println("剩下的是:" + nums[index]);
}
}
输入示例:
请输入M:10
请输入N:3
输出示例:
3 出圈
6 出圈
9 出圈
2 出圈
7 出圈
1 出圈
8 出圈
5 出圈
10 出圈
剩下的是:4
有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输入。
思路:
1. 创建一个长度为M的列表,表示M个人的编号,初始值为1到M。
2. 设置一个指针变量i,表示当前报数的人的索引,初始值为0。
3. 当列表长度大于1时,循环执行以下步骤:
a. 计算出要出圈的人的索引j,即 (i + N - 1) % len(列表)。
b. 将列表中索引为j的元素删除。
c. 更新指针变量i的值,即 i = j % len(列表)。
4. 输出最后剩下的那个人的编号。
代码实现:
```python
M = int(input("请输入M:"))
N = int(input("请输入N:"))
# 创建编号列表
nums = list(range(1, M+1))
# 设置指针变量i
i = 0
# 循环出圈
while len(nums) > 1:
# 计算要出圈的人的索引
j = (i + N - 1) % len(nums)
# 删除出圈的人
nums.pop(j)
# 更新指针变量i的值
i = j % len(nums)
# 输出剩下的那个人的编号
print("最后剩下的人的编号是:", nums[0])
```
示例输出:
```
请输入M:10
请输入N:3
最后剩下的人的编号是: 4
```
阅读全文