人搜实习生面试题

本文介绍了一个有趣的算法问题:在一条直线上,给定起点和终点及若干障碍点(坑),每一步只能跳跃平方数的距离,求从起点到终点的最短跳跃次数。若无法到达,则返回-1。文中提供了C/C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/hackbuteer1/article/details/7581353

http://topic.youkuaiyun.com/u/20120513/20/f6d48eeb-55f5-4d78-8fc0-0dea165c00df.html

4、一条路有k可坑,每次能跳平方数步长(1 4 9 16。。),不能跳到坑里,从a跳到b最少几步?(动态规划题
动态转移方程
f(n) = min( f(大于n的第一个平方数 -n) ,f(n- 小于n的第一个完全平方数) +1 )
【 补充 ing
在一个坐标轴上, 给定两个点,一个起点,一个终点,起点有一个方块,方块可以左右移动,但是移动的长度只能是平方数长(1,4,9,16 ••••) ,同时坐标轴上还有洞,移动的过程中不能越过这个洞,不然会掉下去,问 由起点到终点 至少需要多少次移动,不能到达返回-1】


C/C++ code


int f(int n)
{
    if(n ==1)
        return 1;
    if(n == 2)
        return 2;
    int re = (int)sqrt(1.0*n);

    if(re*re == n)
        return 1;
    int l = re ; 
    int r = re + 1;

    return min(f(r*r -n) ,f(n- l*l) ) + 1;

}
int getMinStep(int startPos ,int endPos , int *holePos ,int size)
{

    int i ;
    for( i = 0 ; i < size ;  i ++)
    {
        if(  (startPos - holePos[i]) * (endPos - holePos[i])  < 0 )
            return -1;
    }

    int n = abs(endPos - startPos);
    printf("%d",f(n));
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值