目录
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