首页 > 试题广场 >

魔法数字

[编程题]魔法数字
  • 热度指数:2411 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的。
操作共有三种,如下:
1.在当前数字的基础上加一,如:4转化为5
2.在当前数字的基础上减一,如:4转化为3
3.将当前数字变成它的平方,如:4转化为16

返回最少需要的操作数。
示例1

输入

3,10

输出

2

备注:
import math 
class Solution:
    def solve(self , n , m ):
        # write code here
        step=0 
        if n==1:
            n+=1
            step+=1
        if n>=m:
            step += n-m
            n=m
        while abs(n-m)>abs(n-int(round(math.sqrt(m)))) and m>3:
            step+=abs(m-pow(int(round(math.sqrt(m))),2))+1
            m = int(round(math.sqrt(m)))
        while n!=m:
            if n>=m:
                step += n-m
                n=m
            else:
                if n*n<m:
                    n*=n
                    step+=1
                else:
                    if n*n-m>=m-n:
                        step+=m-n
                        n = m
                    else:
                        step+=(n*n-m)+1
                        n=m
        return step
发表于 2021-03-17 20:38:33 回复(0)

问题信息

难度:
1条回答 3241浏览

热门推荐

通过挑战的用户

查看代码