当前位置: 代码迷 >> 综合 >> 暑假练习 (青铜) 3281. 约瑟夫环
  详细解决方案

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

热度:67   发布时间:2024-02-05 01:20:55.0

目录

    • 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)%nfor i in range(n):print(person[kill],end=' ')person[kill]=0for each in range(count):kill=(kill+1)%nwhile not person[kill] :if i==n-1:breakkill=(kill+1)%n