定义“圆桌”函数,实现以下功能:有8个人,分别为abcdefgh,编号为别为1~8,按顺序围绕圆桌坐下,从第一个人按顺序报数1,2,3,数到3的倍数的人退出,再从下一个人重新开始数,请输出依次退出人的姓名。(约瑟夫环) Eg.8个人abcdefgh,则输出cfaebhdg
时间: 2023-02-06 20:28:24 浏览: 48
约瑟夫环实现编号是1,2,……,n的n个人按照顺时针方向围坐一圈
5星 · 资源好评率100%
定义 "圆桌" 函数:
```
def yuantable(names, step):
"""
通过约瑟夫环算法, 输出按顺序退出圆桌的人的名字
Args:
names: 一个字符串列表, 包含参加圆桌的人的名字
step: 数到 step 的倍数的人退出圆桌
Returns:
一个字符串列表, 包含依次退出圆桌的人的名字
"""
# 初始化变量
n = len(names)
res = []
# 初始化圆桌序列, 并确定初始指针位置
table = [i for i in range(n)]
cur = 0
# 当圆桌序列不为空时, 进行循环
while table:
# 计算报数
cur = (cur + step - 1) % len(table)
# 获取当前位置的人的名字
name = names[table[cur]]
# 将该人从圆桌中移除
table.pop(cur)
# 将该人加入结果列表
res.append(name)
return res
```
使用示例:
```
names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
step = 3
result = yuantable(names, step)
print(result) # 输出: ['c', 'f', 'a', 'e', 'b', 'h', 'd', 'g']
```
阅读全文