约瑟夫环.救救我吧.

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