Python 3.11 算法实现约瑟夫环问题:模拟小孩报数出列
Python 3.11 算法实现约瑟夫环问题:模拟小孩报数出列
问题描述:
n (1 < n <= 100) 个小孩子手拉手围成一个圈,编号为 k(1 <= k <= n )的人从 1 开始报数,报到 m 的那个人出列,它的下一位又从 1 开始报数,报到 m 的又出列……依此类推,直到所有人都出列,由此产生一个出队编号的序列。
例如:
- n=4 [1,2,3,4]
- k=3
则输出: 3 2 4 1
代码实现:
n = int(input())
m = int(input())
list6 = list(range(1, n + 1))
while len(list6) != 0:
if len(list6) < m:
list6 = list6 + list6[:-1]
print(list6[m - 1])
list6 = list6[m:] + list6[:m]
if len(list6) < m:
list6 = list6 + list6[:-1]
代码说明:
- 使用
list6 = list(range(1, n + 1))创建一个包含 n 个小孩编号的列表。 - 使用
while len(list6) != 0循环,直到所有小孩都出列。 - 使用
if len(list6) < m判断是否需要将列表循环拼接,以确保报数时不会越界。 - 使用
print(list6[m - 1])打印出列小孩的编号。 - 使用
list6 = list6[m:] + list6[:m]将列表进行旋转,模拟小孩报数的过程。 - 重复步骤 3-5 直到所有小孩都出列。
运行代码后,将输出出队编号的序列。
原文地址: https://www.cveoy.top/t/topic/o6Fu 著作权归作者所有。请勿转载和采集!