首页 > 试题广场 >

小招喵跑步

[编程题]小招喵跑步
  • 热度指数:10181 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是:
1.数轴上向前走一步,即n=n+1 
2.数轴上向后走一步,即n=n-1 
3.数轴上使劲跳跃到当前点的两倍,即n=2*n
现在小招喵在原点,即n=0,它想去点x处,快帮小招喵算算最快的走法需要多少步?

输入描述:
小招喵想去的位置x


输出描述:
小招喵最少需要的步数
示例1

输入

3

输出

3
头像 已注销
发表于 2020-08-23 10:54:26
题目 题目描述小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是:1.数轴上向前走一步,即n=n+12.数轴上向后走一步,即n=n-13.数轴上使劲跳跃到当前点的两倍,即n=2*n现在小招喵在原点,即n=0,它想去点x处,快帮小招喵算算最快的走法需要多少步? 输入描述:小招喵想 展开全文
头像 牛客fd515346550号
发表于 2022-05-15 20:34:52
这道题有大佬已经讲解的很好了,我想说的是 如果当前位置不能被2整除的时候,到达i位置有两种情况: (1)i-1满足当前位置为偶数,然后加上跳到本次的位置步数 dp[i]=dp[i-1]+1,这里还可以写成:dp[i]=dp[(i-1)/2] + 1 + 1; (2)i+1满足当前位置为偶数, 然后回 展开全文
头像 少年锦时_zkn
发表于 2021-12-01 13:48:31
#//经过自己的分析,这个题只用考虑正数即可,同时刚开始时候考虑的是动规,但那样根本无法确定建立多大的数组存储。 //因此考虑递归,递归的思想为贪心。 //偶数的最小值一定是f(x/2)+1,但奇数不一定,因此要去f(x-1),f(x+1)的最小值。 int dfs(int x){ if(x 展开全文
头像 牛客216353250号
发表于 2023-09-21 13:03:53
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () = 展开全文
头像 three_0430
发表于 2023-10-15 17:38:53
#include <iostream> using namespace std; int f(int x){ if(x < 3){ return x; } else if(x % 2 == 0){ // return f(x 展开全文
头像 我吃一口就行
发表于 2022-08-13 18:22:24
#include <iostream> #include <cmath> using namespace std; int main() {     int n;   展开全文
头像 twilly
发表于 2024-04-19 16:39:45
import sys for line in sys.stdin: #这里面2n到达的位置应该是唯一可能会导致往后走步数还能减少的情况 n=int(line) if n<0: n=-n dp=[i for i in range(n+2)] # 一 展开全文
头像 人走天空
发表于 2023-08-01 20:38:34
x = int(input()) n = 0 def getstep(x, step): step += 1 if x == 1: res.append(step) step -= 1 elif x < 0: step 展开全文
头像 灿烂ll人生
发表于 2022-05-09 09:25:03
正数和负数最少步数相同。 主要分为两种情况,n为偶数和n为奇数。 1.当n为偶数时,到达的方式两种,n-1,n/2; 2.当n为奇数时,到达方式两种,取最小。     (1)是直接从上一步n-1到达。     (2)因为n为奇数, 展开全文
头像 牛客457179048号
发表于 2022-02-19 17:56:32
分析 首先这题第一反应就是和青蛙过河有点类似,但是这题可以越过x,而且可能为负数,所以思路是首先将题目降为青蛙过河问题,只能向前走,跳过有且只能跳过一次,因此我们可以使用动态规划的思路。 问题降维 首先我们希望小招只能往前走,而且不论x到底为正为负都不会影响最终结果,我们将其置为正 input = 展开全文