前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【牛客网】魔法数字

【牛客网】魔法数字

作者头像
韩旭051
发布2020-07-13 16:41:18
4140
发布2020-07-13 16:41:18
举报
文章被收录于专栏:刷题笔记刷题笔记

链接:https://ac.nowcoder.com/acm/contest/6218/B 来源:牛客网

题目描述

题意:

一天,牛妹找牛牛做一个游戏,牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的。

操作共有三种,如下:

1.在当前数字的基础上加一,如:4转化为5

2.在当前数字的基础上减一,如:4转化为3

3.将当前数字变成它的平方,如:4转化为16

你能帮牛牛解决这个问题吗?

输入:

给定n,m,分别表示牛牛和牛妹的数字。

输出:

返回最少需要的操作数。

示例1

输入

3,10

代码语言:javascript
复制
3,10

输出

2

代码语言:javascript
复制
2

备注:

代码语言:javascript
复制
(1≤n,m≤1000)(1\leq n,m\leq1000)(1≤n,m≤1000)
代码语言:javascript
复制
class Solution {
public:
    /**
     * 返回最后要输出的答案
     * @param n int整型 表示牛牛的数字
     * @param m int整型 表示牛妹的数字
     * @return int整型
     */
    int solve(int n, int m) {
        queue<pair<int,int>> q ;
        int limit = int(1e8) ;
        vector<bool> vis(limit + 1 , false) ;
        vis[n] = true ;
        q.push({n , 0}) ;
        while (!q.empty()) {
            auto temp = q.front() ; q.pop() ;
            if (temp.first == m) {
                return temp.second ;
            }
            // + 1
            if (temp.first + 1 <= limit) {
                if (!vis[temp.first + 1]) {
                    vis[temp.first + 1] = true ;
                    q.push({temp.first + 1 , temp.second + 1}) ;
                }
            }
            // - 1
            if (temp.first > 1) {
                if (!vis[temp.first - 1]) {
                    vis[temp.first - 1] = true ;
                    q.push({temp.first - 1 , temp.second + 1}) ;
                }
            }
            // ^2
            if (temp.first <= limit / temp.first + 1) {
                if (!vis[temp.first * temp.first]) {
                    vis[temp.first * temp.first] = true ;
                    q.push({temp.first * temp.first , temp.second + 1}) ;
                }
            }
        }
        return 0 ;
    }
};

这道题我没有做上来 但是看了大家AC的代码都是使用队列 看来就是要使用这个方法 但是我不太会 哈

队列每次操作的 次数会越来越多 so~

队列这个思想 就算操作次数 的确 懂了哈哈

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入
  • 输出
  • 备注:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档