题目补充:从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数,则该小朋友被淘汰出局, 不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。 例如,当 n=5, k=2 时:1号小朋友报数 1;2号小朋友报数 2 淘汰;3号小朋友报数 3;4号小朋友报数4淘汰;5号小朋友报数5;1号小朋友报数6淘汰;3号小朋友报数7;5号小朋友报数8淘汰;3号小朋友获胜。 让用户给定n和k,请问最后获胜的小朋友编号为多少?
def func41(n, k):
temp_list = [i for i in range(1, n + 1)]
temp = 1
while len(temp_list) > 1:
temp_list.append(temp_list.pop(0))#满足条件的小朋友的编号加到列表最后继续后续操作
temp += 1
if temp % k == 0:
del temp_list[0]#不满足条件的小朋友的编号移除出列表,不再进行后续操作
for i in temp_list:
return '%d号小朋友获胜' % i
if __name__ == '__main__':
print(func41(5, 2))