蓝桥杯真题:调手表(Java)

题目

在这里插入图片描述

思路

  • 从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();
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53946852/article/details/124911706
今日推荐