10.13华为机试python(1)

约瑟夫环问题
输入测试用例数量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("")

你可能感兴趣的:(10.13华为机试python(1))