约瑟夫环问题
输入测试用例数量num
每组测试用例输入格式:
输入人数
输入kill号
测试用例:
输入:3 2 3 4 2 4 5
输出:1 2
2 4 3 1
1 3 2 4
思路:
分为进桌和出桌。
res = []
num = int(input())
for i in range(num):#测试用例数
n = int(input())#人数
m = int(input())#kill号
come = []#进桌序列
leave = []#出桌序列
for j in range(n):#进桌,进n个人
come.append(j+1)#j从0开始,所以要进j+1
start = 0
for k in range(n-1):#最后一个人直接放到出桌最后一位,所以先执行n-1个人(除最后一个人的情况)
start = (start+m-1)%len(come)
leave.append(come[start])#把出桌的编号放到出桌里
del come[start]#在入桌中删除这个编号
leave.append(come[0])#把最后一个人放到出桌的最后
res.append(leave)#把出桌作为放到结果里
for i in range(len(res)):#输出数据
for j in range(len(res[i])):
print(res[i][j],end='')#默认输出完是回车,所以后面加上end=''
if j != len(res[i])-1 :#如果输出没到最后一个就输出空格,最后一个不输出空格
print(" ",end='')
else :
print("")