暑假练习 (青铜) 3281. 约瑟夫环

3281. 约瑟夫环

题目:

【问题描述】

在罗马人占领乔塔帕特后,n 个犹太人躲到一个洞中,这 n 个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式:n 个人排成一个圆圈,由第 k 个人开始报数,每报数到 m 的人就必须自杀,然后再由下一个人重新报数,直到所有人都自杀身亡为止。

【输入形式】

输入为三个正整数n,m和k,空格分隔,n<=50。

【输出形式】

输出为n个整数,为n个人的自杀顺序,空格分隔。

【样例输入1】

10 4 1
【样例输出1】

4 8 2 7 3 10 9 1 6 5
【样例输入2】

30 10 5
【样例输出2】

14 24 4 15 26 7 19 1 13 28 11 27 12 30 18 6 25 20 10 8 5 9 17 23 16 3 22 29 21 2
【样例说明】

约瑟夫环的起始编号为1,编号为[1, n]。

注意判断数组是否溢出。

m的值可以大于n。

1<=k<=n

【评分标准】



思路:
用链表,要及时更新总长度
代码:

num=input()
num=[int(i) for i in num.split(' ')]

n,m,k=num[0],num[1],num[2]
person=[i for i in range(n+1)]
""" print(person) """
person[0]=person[n]
count=m
kill=(m+k-1)%n

for i in range(n):

    print(person[kill],end=' ')
    person[kill]=0

    for each in range(count):
        kill=(kill+1)%n
        while not person[kill] :
            if i==n-1:
                break
            kill=(kill+1)%n   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值