共计 1243 个字符,预计需要花费 4 分钟才能阅读完成。
import java.util.ArrayList;
import java.util.Scanner;
/**
* 标题:报数游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
* 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,最后剩下三个人
*
* @since 2022年5月11日
*/
public class M_N_T_37 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int M = scanner.nextInt();
if (M <= 1 || M >= 100) {
System.out.println("ERROR!");
return;
}
// int[] rens = new int[200];
ArrayList<String> strings = new ArrayList<>();
for (int i = 0; i < 100; i++) {
// rens[i] = i + 1;
strings.add(i + 1 + "");
}
// extracted(rens, 0, 0, 0);
extracted(strings, M - 1, M);
StringBuilder stringBuilder = new StringBuilder();
for (String string : strings) {
if (stringBuilder.length() == 0) {
stringBuilder.append(string);
continue;
}
stringBuilder.append(",").append(string);
}
System.out.println(stringBuilder);
}
private static void extracted(ArrayList<String> strings, int begin, int M) {
if (strings.size() < M) {
return;
}
int index = begin;
for (int i = 0; i < strings.size(); i++) {
if (i != index) {
continue;
}
strings.remove(i);
strings.add(i, "-1");
index += M;
}
int next_begin = index - strings.size();
strings.removeIf("-1"::equals);
extracted(strings, next_begin, M);
}
}
正文完