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

Posted 爱敲代码的三毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯真题:调手表(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();
    

以上是关于蓝桥杯真题:调手表(Java)的主要内容,如果未能解决你的问题,请参考以下文章

2020第十一届蓝桥杯真题JAVA B组省赛第二场答案分享(2020.10.17)

Java--蓝桥杯真题

蓝桥杯java历年真题及答案整理1~20.md

第十一届蓝桥杯——JAVA组真题

第十一届Java B组蓝桥杯真题

蓝桥杯真题:玩具蛇(Java)