首页 > 试题广场 >

小招喵跑步

[编程题]小招喵跑步
  • 热度指数: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
#include <stdio.h>

int digui(int data)
{
    if(data==1)
        return 1;
    else if(data==2)
        return 2;
    else if(data%2==0 && data!=0)
        return 1+digui(data/2);
    else if(data%2!=0)
        return 1+digui(data-1);
    else
        return 0;
}

int digui2(int data)
{
    if(data==-1)
        return 1;
    else if(data==-2)
        return 2;
    else if(data%2==0 && data!=0)
        return 1+digui2(data/2);
    else if(data%2!=0)
        return 1+digui2(data+1);
    else
        return 0;
}

int main()
{
    int data;
    scanf("%d",&data);
    int i;
    if(data>=0)
        i=digui(data);
    else
        i=digui2(data);
    printf("%d\n",i);
    return 0;
}

//很好奇你们是怎么通过的,我同样以递归的形式写的代码,当数据为1980时,输出错误18,最简单为14
发表于 2023-11-02 00:27:16 回复(0)