题目

思路
- 从0开始搜索,如果当前时间+1或者+k大于等于n就要对n取余,所以每次加都对n取余
- 每次相加的结果都用set去重,如果是第一次出现就加入队列继续相加
- 当队列为空的时候,就是从一个时间到另一时间的最多要按的次数,这里是从0开始计数的所以结果要减一
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
Set<Integer> set = new HashSet<>();
Queue<Integer> queue = new LinkedList<>();
queue.offer(0);
set.add(0);
int count = 0;
while (!queue.isEmpty()) {
int size = queue.size();
while (size-- != 0) {
int tmp = (queue.peek()+1)%n;
if (set.add(tmp)) {
queue.offer(tmp);
}
tmp = (queue.peek()+k)%n;
if (set.add(tmp)) {
queue.offer(tmp);
}
queue.poll();
}
count++;
}
System.out.println(count-1);
sc.close();
}
}
