判断报的数是否要被淘汰使用number % k == 0 || String.valueOf(number).endsWith(String.valueOf(k)),确定要被淘汰的小朋友加入remove数组中,一轮结束后再一起淘汰,不然会出现下标错误。注意经过的一轮的淘汰后可能没有剩下小朋友了,所以要取出最后一个被淘汰的或者唯一没有被淘汰的小朋友输出。
奉上java满分代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
private static int k;
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String[] firstLine = scanner.nextLine().split(" ");
int n = Integer.parseInt(firstLine[0]);
k = Integer.parseInt(firstLine[1]);
List<Integer> children = new ArrayList<>();
for(int i = 0; i < n; i++){
children.add(i + 1);
}
scanner.close();
List<Integer> remove = new ArrayList<>();
int number = 0;
while (true){
remove.clear();
for(int child : children){
number++;
if(isEliminated(number))
remove.add(child);
}
children.removeAll(remove);
if(children.size() <= 1)
break;
}
if(children.size() == 0){
System.out.println(remove.get(remove.size() - 1));
} else{
System.out.println(children.get(0));
}
}
private static boolean isEliminated(int number){
return number % k == 0 || String.valueOf(number).endsWith(String.valueOf(k));
}
}