码迷,mamicode.com
首页 > 其他好文 > 详细

招银2018[编程题]小招喵跑步

时间:2018-08-30 11:41:25      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:ace   需要   new   mes   pac   编程   col   ++   out   

小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是:
1.数轴上向前走一步,即n=n+1 
2.数轴上向后走一步,即n=n-1 
3.数轴上使劲跳跃到当前点的两倍,即n=2*n
现在小招喵在原点,即n=0,它想去点x处,快帮小招喵算算最快的走法需要多少步?

#include <iostream>
//#include <algorithm>
using namespace std;

#define min(a, b) (((a)<(b))?(a):(b))

int minSteps(int n) {
    int result = 0;
    if (n < 0) n = -1 * n;

    //动态规划方法
    if (n == 0) return 0;
    if (n == 1) return 1;
    int *steps = new int[n + 1];
    steps[0] = 0;
    steps[1] = 1;
    for (int i = 2; i <= n; i++) {
        if (i % 2 == 0)
            steps[i] = min(steps[i - 1], steps[i / 2]) + 1;
        else
            steps[i] = min(steps[i - 1], steps[(i + 1) / 2] + 1) + 1;
    }
    result = steps[n];
    delete[]steps;
    return result;
}

int main() {
    int n;
    cin >> n;
    cout << minSteps(n) << endl;
    return 0;
}

 

招银2018[编程题]小招喵跑步

标签:ace   需要   new   mes   pac   编程   col   ++   out   

原文地址:https://www.cnblogs.com/wqpkita/p/9559081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!