牛客--2019快手--求x到y的最少计算次数

题目描述:
给定两个-100到100的整数x和y,对x只能进行加1,减1,乘2操作,问最少对x进行几次操作能得到y?
例如:
a=3,b=11: 可以通过322-1,3次操作得到11;
a=5,b=8:可以通过(5-1)*2,2次操作得到8;

输入描述:
输入以英文逗号分隔的两个数字,数字均在32位整数范围内。
输出描述:
输出一个数字
输入:
3,11
输出:
3
题意:
题目描述
题解
暴力搜索
代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;

const int maxn = 100000 + 5;
int step[maxn],vis[maxn];
queue<int>q;

int bfs(int n,int k){
    int now,next;
    step[n] = 0;
    vis[n] = 1;
    q.push(n);
    while(!q.empty()){
        now = q.front();
        q.pop();
        for(int i = 1; i <= 3; i++){
            if(i == 1) next = now - 1;
            else if(i == 2) next = now + 1;
            else if(i == 3) next = now * 2;
            if(next < 0 || next > maxn) continue;
            if(!vis[next]){
                vis[next] = 1;
                q.push(next);
                step[next] = step[now] + 1;
            }
            if(next == k) return step[next];
        }
    }
}

int main(){
    int n,k;
    while(scanf("%d,%d",&n,&k)!=EOF){
        if(n >= k) printf("%d\n",n - k);
        else printf("%d\n",bfs(n,k));
    }
    return 0;
}


发布了228 篇原创文章 · 获赞 1 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Ypopstar/article/details/105149078
今日推荐