前言: 考试题目大同小异,练习真题是通过考试的捷径,思路仅供参考,如果有更好的思路,欢迎一起交流学习,创作不易,文章若对你有帮助,点个关注,谢谢 题目描述 100个人围成一圈,每个人有一个编码,编号从1开始到100。 他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。 请问最后剩余的人在原先的编号为多少? 输入描述 输入一个整数参数 M 输出描述 如果输入参数M小于等于1或者大于等于100,输出“ERROR!”; 否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串 用例 输入 3 输出 58,91 说明 输入M为3,最后剩下两个人。 输入 4 输出 34,45,97 说明 输入M为4,最后剩下三个人。 分析:使用list(range(1,101))构造一个1到100的列表,循环列表报数等于M时, 进行列表切割,将M前面的放到列表最后,构造一个圈的效果;递归调用,不断判断报数到M的下标,直到列表的长度小于M
直接上代码:
M = int(input())
if 1< M <100:
lis = list(range(1,101))
def func(lis):
for i in range(1,len(lis)+1):
if i == M:
#报数等于M时,进行列表切割,将M前面的放到列表最后,构造一个圈的效果
lis =lis[M:]+lis[0:M-1]