n个人围成一圈,按1到n的顺序编号。从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,问最后留下的是原来的第几号。 输入 首先输入两个正整数n和m,n表示n个人围一个圈子(n>=2),m表示从1报数到m的人退出圈子(1=<m)。 输出 最后剩下的人的编号。 样例输入 复制 2 3 样例输出 复制 2
时间: 2024-02-21 07:58:24 浏览: 8
这也是一个经典的约瑟夫问题,可以用模拟的方法解决。具体做法是:
1. 把n个人围成一个圈,编号从1到n。
2. 从第一个人开始报数,报到m的人出圈,圈子缩小为n-1个人。
3. 重复第2步,直到圈子缩小为1个人为止,剩下的那个人即为最后留下的人。
假设当前圈子的大小为size,第i个人的编号为i,则可以用一个数组来模拟这个过程,具体的代码如下:
```python
n, m = map(int, input().split())
people = [i for i in range(1, n+1)]
i = 0
while len(people) > 1:
i = (i + m - 1) % len(people)
people.pop(i)
print(people[0])
```
其中,people是一个列表,表示当前圈子中的人,i表示当前报数的人的下标,每次通过取模运算计算出下一个出圈的人的下标。最后剩下的那个人即为最后留下的人的编号。