目录
- 🍋题目描述
- 🍋思路
- 🍋源代码
- 🍋其他真题
🍋题目描述
有一个整数 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]);
}
}