一、题目描述
100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?
二、输入描述
输入一个整数参数M。
三、输出描述
如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串。
四、解题思路
我们可以使用模拟的方法来解决这个问题。首先,我们将100个人的编号存储在一个映射表中,编号从1到100。然后,从1开始按顺时针方向报数,每次报数到M时,将对应的编号从映射表中移除。重复这个过程,直到剩余的人数小于M。最后,输出剩余人的编号。
具体步骤如下:
- 读取输入的参数M;
- 如果M小于等于1或者大于等于100,输出"ERROR!"并结束程序;
- 创建一个映射表map,将100个人的编号存储在映射表中,编号从1到100;
- 初始化变量start为1,表示报数的起始值;
- 使用while循环,循环条件为映射表的大小大于等于M:
- 创建一个迭代器iterator,遍历映射表;
- 在迭代过程中,获取当前键值对的键和值;
- 将当前键的值更新为start的值;
- 如果当前值等于M,表示报数到M&#