CodeFoeces-520B

题目

原题链接:B. Two Buttons

题意

给定n和m,只能作*2或者-1,求n到m的最少步骤数。标准答案是搜索,也可当规律题。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,m;
    scanf("%d %d",&n,&m);
    int c=0;
    if(n>m) {
        c=n-m;
    } else {
        while(n!=m) {
            if(m%2==0 && m>n) {
                m/=2;
                c++;
            } else {
                if(n>=m){
                    c+=n-m;
                    break;
                }
                m=(m+1)/2;
                c+=2;
            }
        }
    }
    printf("%d\n",c);
    return 0;
}

BFS

#include<stdio.h>
#include<queue>
using namespace std;
struct node {
    int value,count;
};
int visit[10010]= {0};
queue<node> q;
int bfs(int n,int m) {
    node now,next;
    now.count=0;
    now.value=n;
    while(!q.empty()) q.pop();
    q.push(now);
    visit[now.value]=1;
    while(!q.empty()) {
        now=q.front();
        q.pop();
        if(now.value==m) return now.count;
        if(now.value*2<=10000 && !visit[now.value*2]) {
            next.value=now.value*2;
            next.count=now.count+1;
            visit[now.value*2]=1;
            q.push(next);
        }
        if(now.value-1>0 && !visit[now.value-1]){
            next.value=now.value-1;
            next.count=now.count+1;
            visit[now.value-1]=1;
            q.push(next);
        }
    }
}
int main() {
    int n,m;
    scanf("%d%d",&n,&m);
    printf("%d\n",bfs(n,m));
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33
  • 326. Power of Three Given an integer, write a function to...
    跑者小越阅读 6,459评论 0 1
  • leetcode刷题记录本文记录一下leetcode刷题记录,记录一下自己的解法和心得。 LeetCode Two...
    EarthChen阅读 8,808评论 0 6
  • 第20天·21天美颜瘦身课 每一位都可以通过这张卡片觉察自己: 1、直觉他叫什么名字?果果 2、他几岁了?7岁 3...
    韦梅梅阅读 1,475评论 0 0
  • 昨天我饶有趣味地点开了一部叫做“人类的错误”的动画片。原来这部动画片是讲述如何保护环境的故事。这样吧,我用第一人称...
    所若音阅读 3,118评论 1 3