本题刚开始我还在用数组去模拟删除,结果发现队列更简单:
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;
public class likou1823 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
System.out.println(f(n,k));
}
private static int f(int n, int k) {
Queue<Integer> list = new ArrayDeque<Integer>();
for (int i = 1; i <= n; i++) {
list.offer(i);
}
while (list.size() > 1) {
for (int i = 1; i < k; i++) {
list.offer(list.poll());
}
list.poll();
}
return list.peek();
}
}
n=1 2 3 4 5
k=3
1 2 4 5 退出3
4 5 2 退出 1
2 4 退出 5
2 退出 4
还有一个数学解法,我没怎么看懂,所以直接给链接: