有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的人退出圈子;然后圈子缩小,从下一个人继续游戏,问最后留下的是第几号(只留1 人)。要求定义函数实现。
输入格式:
初始n和k自由指定。
输出格式:
最后留下人的原序号,以列表形式展示。
输入样例:
在这里给出一组输入。例如:
45
4
输出样例:
在这里给出相应的输出。例如:
[27]
解析
简单题,定义一个列表,然后进行遍历,每次遇到整除k值,将此时位置的列表的值赋值为0,然后总人数减1,但是列表的元素数量不变,直到最后人数为1时,跳出循环,输出答案。
def findans(n, k):
list = [it for it in range(1,n + 1)]
cnt = 0
people = n
while(True):
for it in range(0, n):
if list[it] != 0:
cnt += 1
if cnt % k == 0:
list[it] = 0
people -= 1
if people == 1:
for i in list:
if i != 0:
return [i]
n = int(input())
k = int(input())
print(findans(n, k))