Python题目题解-约瑟夫问题

题目:

描述:

有 m 个人,其编号分别为 1~m。按顺序围成一个圈,现在给定一个数 n,从第一个人开始依次报数,报到 n 的人出圈,然后再从下一个人开始,继续从 1 开始依次报数,报到 n 的人再出圈,……如此循环,直到最后一个人出圈为止。编程输出所有人出圈的顺序

输入:一行两个正整数 m 和 n,之间用一个空格隔开,1≤m<100,1≤n≤32767。
输出:输出 m 行,每行一个正整数,表示依次出圈的人的编号。

样例:

#输入
8 5
#输出
5
2
8
7
1
4
6
3

题解:

def num(x,y):
    if y < x or x == y:
        return y
    if y > x:
        while y > x:
            y = y - x
        return y
m,n = map(int,input().split())
list = []
for i in range(m):
    list.append(i+1)
for k in range(m):
    z = num(m-k,n)
    print(list[z-1])
    listlinshi = []
    for t in range(m-k-1):
        listlinshi.append(list[z-t-2])
    listlinshi.reverse()
    list = listlinshi

——————本文内容至此已结束——————

本文由凌霄之上博客原创发布或合理转载,未经允许•请勿转载。有什么想法来评论区讨论一下吧!

注意:资源无法下载(如链接无法打开),请联系管理员解决。另外蓝奏网盘链接如果无法打开,可以尝试将链接中的"lanzous"改为“lanzoui”

© 版权声明
THE END
喜欢就支持一下吧
点赞17赞赏 分享
评论 抢沙发

请登录后发表评论