2.报数游戏
■ 题目描述
输入一个整数参数 M
输出描述:
如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;
否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
输出
58,91
说明
输入M为3,最后剩下两个人。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4
输出
34,45,97
说明
#华为机试#
100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,
然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?
输入描述:输入一个整数参数 M
输出描述:
如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;
否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
输出
58,91
说明
输入M为3,最后剩下两个人。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4
输出
34,45,97
说明
输入M为4,最后剩下三个人。
这道题我用的队列的思想,每次都把前面的编号弹出,只要弹出的人不是第M个,就把那个人的编号重新加到队列尾部,直到队列长度小于M,退出循环
from collections import deque M = int(input()) if M <= 1&nbs***bsp;M >= 100: # 先根据题目进行输入不合法的异常处理 print("ERROR!") # 这里刚开始还没注意,感叹号没加导致用例通过率只有百分之80,后面才改了 else: arr = [i for i in range(1, 101)] queue = deque() queue.extend(arr) while len(queue) >= M: for i in range(M): num = queue.popleft() if i != M-1: queue.append(num) res = [] for j in queue: res.append(j) res.sort() print(",".join([str(x) for x in res]))