0
点赞
收藏
分享

微信扫一扫

Java习题练习:最少次数


目录

  • ​​🍋题目描述​​
  • ​​🍋思路​​
  • ​​🍋源代码​​
  • ​​🍋其他真题​​

🍋题目描述

有一个整数 A=2021,每一次,可以将这个数加 1 、减 1 或除以 2,其中除以 2 必须在数是偶数的时候才允许。
例如,2021 经过一次操作可以变成 2020、2022。
再如,2022 经过一次操作可以变成 2021、2023 或 1011。
请问,2021 最少经过多少次操作可以变成 1。

🍋思路

考点:bfs,即宽搜

这是一道数字填空题。
考的是宽搜。
我们记忆熟悉那个模板,即可。

  • 答案:14

🍋源代码

import java.util.LinkedList;
import java.util.Queue;

public class Main {
static int dis[]=new int[2100];
static boolean vis[]=new boolean[2100];//默认初始值为false

public static void main(String[] args) {
// TODO Auto-generated method stub
Queue<Integer>queue=new LinkedList<>();//这里必须得是Integer,记忆
queue.add(2021);
vis[2021]=true;
dis[2021]=0;
while(!queue.isEmpty()) {
int x=queue.poll();//这里记忆
if(x==1) break;//这里需要注意。这里最先到达,说明次数最小,直接break
if(!vis[x+1]) {
queue.add(x+1);
vis[x+1]=true;
dis[x+1]=dis[x]+1;
}
if(!vis[x-1]) {
queue.add(x-1);
vis[x-1]=true;
dis[x-1]=dis[x]+1;
}
if(x%2==0&&!vis[x/2]) {
queue.add(x/2);
vis[x/2]=true;
dis[x/2]=dis[x]+1;
}

}
System.out.println(dis[1]);
}
}


Java习题练习:最少次数_java


举报

相关推荐

0 条评论