m=int(input("共多少人:"))
n=int(input("杀第几个人:"))
l=int(input("留几个人:"))
s=[x for x in range(1,m+1)]
while m>l:
s3=s*n
s.remove(s3.pop(n-1))
s1=s[n-1:]
s2=s[:n-1]
s=(s1+s2)
m-=1
s.sort()
print(s)
约瑟夫环,只留一个人的话 最后出列的两个人总是反的.救救我吧.
def josephus1(num, k, m):
"""
约瑟夫环(约瑟夫问题)是一个数学的应用问题:
已知num个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;
他的下一个人又从1开始报数,数到m的那个人又出列;
依此规律重复下去,直到圆桌周围的人全部出列。
:param num:总人数
:param k:开始的编号
:param m:数到m的出列
:return:
"""
alist = [x + 1 for x in range(num)]
print(alist) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
index, step = k-1, m # 从1号开始报数,数到3的那个人出列
while len(alist) > 1:
index = (index + step - 1) % len(alist) # 列表的索引
print('出去的数:', alist[index])
# del alist[index]
alist.pop(index)
return '最后的一个数:%s' % alist[0]
print(josephus1(13, 1, 3)) # 总共13个人,从第1个开始数,每数到3的出去
"""
出去的数: 3
出去的数: 6
出去的数: 9
出去的数: 12
出去的数: 2
出去的数: 7
出去的数: 11
出去的数: 4
出去的数: 10
出去的数: 5
出去的数: 1
出去的数: 8
最后的一个数:13
"""
你的程序没错啊,最后两个值没有反
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y