有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输入。
时间: 2024-05-08 19:17:16 浏览: 8
思路:
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
```
相关问题
4. 有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输入。
```python
M = int(input("请输入M个人围成一圈:"))
N = int(input("请输入报到N时出圈:"))
# 初始化列表,表示每个人是否还在圈中
people = [True] * M
# 记录已经出圈的人数和当前的位置
count, index = 0, 0
# 开始报数
while count < M - 1:
# 计数器从1开始,数到N时出圈
i = 1
while i <= N:
if people[index]:
if i == N:
people[index] = False
count += 1
print("第{}个人出圈".format(index + 1))
i += 1
index = (index + 1) % M
# 最后剩下的一个人
for i in range(M):
if people[i]:
print("最后剩下的是第{}个人".format(i + 1))
break
```
运行结果:
```
请输入M个人围成一圈:10
请输入报到N时出圈:3
第3个人出圈
第6个人出圈
第9个人出圈
第2个人出圈
第7个人出圈
第1个人出圈
第8个人出圈
第5个人出圈
第10个人出圈
最后剩下的是第4个人
```
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