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("")
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容