题目描述
100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?
输入描述:输入一个整数参数M
输出描述:如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串
示例1:
输入 3
输出 [58,91]
解决
def report(M, arr, num):
while len(arr) >= M:
i = 0 # 下标
for j in range(len(arr)): # 循环len(arr)次
if num == M: # 喊到炸弹数字
del arr[i]
num = 1 # 恢复1继续报数
else:
num += 1
i += 1
print(arr)
def M_num():
try:
M = int(input("输入一个整数炸弹:"))
if M < 1 or M > 100:
print("ERROR!")
return M_num()
except ValueError:
print("ERROR")
return M_num()
return M
if __name__ == '__main__':
M = M_num()
# 100个人
peo = [i for i in range(1, 101)]
num = 1
report(M, peo, num)
运行