M,N=map(int,input().split()) list=[] for i in range(1,M+1): list.append(i) l=j=0 while list!=[]: for c in list: l+=1 j+=1 if l%N==0 and j==1: list=list[1::] print(c,end=" ") if l%N==0 and j!=len(list): list=list[0:j]+list[j+1::] print(c,end=" ") if l%N==0 and j==len(list): list=list[0:j] print(c,end=" ") j=0
时间: 2024-04-05 10:33:59 浏览: 188
这段代码是一个约瑟夫环问题的解法。输入M和N,表示M个人围成一个圆圈,从编号为1的人开始报数,报数为N的人出圈,然后从出圈的下一个人开始重新报数,直到剩下最后一个人为止。下面是代码的解释:
1. M, N=map(int,input().split()) # 输入M和N,分别表示人数和报数的值
2. list=[] # 创建一个空列表
3. for i in range(1,M+1): # 循环M次,将1~M的数字添加到列表中
4. list.append(i)
5. l=j=0 # 初始化l和j变量为0
6. while list!=[]: # 当列表不为空时循环
7. for c in list: # 循环遍历列表中的元素
8. l+=1 # 每循环一次,l加1
9. j+=1 # 每循环一次,j加1
10. if l%N==0 and j==1: # 如果报数为N并且是第一个人,直接删除该元素,并输出
11. list=list[1::] # 删除列表中的第一个元素
12. print(c,end=" ")
13. if l%N==0 and j!=len(list): # 如果报数为N并且不是最后一个人,删除该元素,并输出
14. list=list[0:j]+list[j+1::] # 删除列表中的第j个元素
15. print(c,end=" ")
16. if l%N==0 and j==len(list): # 如果报数为N并且是最后一个人,删除该元素,并输出
17. list=list[0:j] # 删除列表中的最后一个元素
18. print(c,end=" ")
19. j=0 # 将j变量重置为0,重新开始循环
阅读全文