约瑟夫环代码python
时间: 2023-10-13 16:20:32 浏览: 72
以下是一个基于Python的约瑟夫环实现:
```
def josephus(n, k):
if n == 1: # 特判当前只剩1个人的情况
return 1
else:
return (josephus(n-1, k) + k-1) % n + 1
n = int(input("总人数:"))
k = int(input("要出圈的数字:"))
print("最后剩下的人的编号是:", josephus(n, k))
```
当然,以上只是一种实现方式,还可以用链表等数据结构来解决。
相关问题
约瑟夫环Python代码
这里是一个约瑟夫环问题的Python代码,具体解释可以参考代码注释:
```python
def josephu(n, k, m):
# n个人围成一个圆圈,首先将每个人的编号存入列表中
l = [i for i in range(1, n + 1)]
# 定义count记录报数,初始值为0
count = 0
# 当列表中的人数大于m时,重复下列步骤
while len(l) > m:
# 每次取出第一个人,并将count加1
count += 1
t = l.pop(0)
# 如果报数不等于k,则将这个人放到列表末尾
if count != k:
l.append(t)
# 如果报数等于k,则将这个人从列表中删除
else:
count = 0
# 返回最后剩下的人的编号
return l
print(josephu(100, 4, 2))
```
约瑟夫环问题python代码
以下是使用Python的解决方案:
```python
def josephus(n, k):
if n == 1:
return 1
else:
return (josephus(n - 1, k) + k-1) % n + 1
# 测试
n = 7
k = 3
print("最后一个剩下的人的编号是 ", josephus(n, k))
```
输出为:最后一个剩下的人的编号是 4
解释:
假设n = 7,k = 3,那么就有7个人围成一圈,从第1个人开始报数,报到3的人出圈,然后从下一个人重新开始报数,直到最后只剩下一个人。
第一轮:1 2 3(出圈) 4 5 6 7
第二轮:1 2(出圈) 4 5 6 7
第三轮:1(出圈) 4 5 6 7
第四轮:4 5(出圈) 6 7
第五轮:4 5(出圈) 7
最后剩下的人是4。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.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)