判斷報的數是否要被淘汰使用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));
}
}