题解 | #小招喵跑步#

小招喵跑步

https://www.nowcoder.com/practice/1177e9bd1b5e4e00bd39ca4ea9e4e216

#include <iostream>
using namespace std;

int f(int x){
    if(x < 3){
        return x;
    }
    else if(x % 2 == 0){
        // return f(x - 1) + f(x / 2);
        return  f(x/2) + 1;//偶数最小值是f(x/2)+1,只用看一半前的部分需要的步数
    }
    else if(x % 2 != 0){
        return min(f(x - 1), f(x + 1)) + 1;
    }
    return 0;//如果都不满足则为0
}

int main() {
    int n;
    cin >> n;
    if(n < 0){
        n = -n;//只考虑正数
    }
    int a = f(n);
    cout << a << endl;
    return 0;
}

使用动态规划思想,当x<3时(其实==3也行,代码忘记改了),x的值就是最小步数,大于这个数时,要想得到最小步数,就是看一半处的(越到后面,+1,-1会用的少),偶数就很简单,直接取一半,奇数分类讨论一半前是+1后的还是-1后的

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:16
点赞 评论 收藏
分享
Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务