用数组解决有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位.
时间: 2023-06-02 15:05:40 浏览: 148
这个问题可以使用约瑟夫环问题的解法来求解。最后留下的人的编号可以用下面的公式计算:f(n,m)=(f(n-1,m)+m)%n,其中n表示人的总数,m表示每次要退出的报数。根据这个公式,如果n=1时,最后剩下的人的编号就是1。如果n>1,最后剩下的人的编号可以递归计算出来。
相关问题
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问
最后留下的是原来第几号的那位?
这是一个经典的约瑟夫问题。根据引用中的解题思路,我们可以写一个函数来解决这个问题。具体步骤如下:
1. 定义一个大小为n的一维数组,初始化为从1到n。
2. 设一个计数器,按照题述条件,遍历每一个数组元素,并从1到3报数,若当前元素计数为3则将其从数组中删除(即标记该人出局),同时使计数器置0并记录出局人数。
3. 如果出局人数为n-1人(即只剩下1人)终止循环,否则由外层循环控制使得再次遍历数组,直到踢出n-1人。
4. 最后满足只剩1人的条件后,再次遍历数组,找出那个最终没有被踢出的人,并返回其序号。
因此,最后留下的是原来第几号的那位取决于n和报数的规则。如果n=5,报数规则为从1到3,则最后留下的是原来第3号的那位。如果n=10,报数规则为从1到2,则最后留下的是原来第5号的那位。
n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号的那位
根据提供的引用内容,以下是解决这个问题的两种方法:
方法一:
```python
def find_last_person(n):
circle = list(range(1, n+1)) # 创建一个大小为n的一维数组,初始化为从1到n
count = 0 # 计数器,用于记录报数次数
while len(circle) > 1: # 当圈子中的人数大于1时循环
for i in range(len(circle)):
count += 1
if count == 3: # 当报数次数为3时,将该人从圈子中移除
circle.pop(i)
count = 0 # 重置计数器
break
return circle[0] # 返回最后留下的人的序号
n = 10 # 假设有10个人围成一圈
last_person = find_last_person(n)
print("最后留下的人是原来的第{}号".format(last_person))
```
方法二:
```python
def find_last_person(n, m):
circle = list(range(1, n+1)) # 创建一个大小为n的一维数组,初始化为从1到n
num = 0 # 计数器,用于记录报数次数
while len(circle) > 1: # 当圈子中的人数大于1时循环
circle.append(circle.pop(0)) # 把已报数的人取出放到队尾,以此实现围成圈循环往复
num += 1
if num == m: # 当报数次数为m时,将该人从圈子中移除
del circle[0]
num = 0 # 重置计数器
return circle[0] # 返回最后留下的人的序号
n = 10 # 假设有10个人围成一圈
m = 3 # 每次报数到3的人退出圈子
last_person = find_last_person(n, m)
print("最后留下的人是原来的第{}号".format(last_person))
```
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)