Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能应付最后一跳?_Python_Python 3.x - Fatal编程技术网

Python 我怎样才能应付最后一跳?

Python 我怎样才能应付最后一跳?,python,python-3.x,Python,Python 3.x,兔子最多能跳50厘米远。它想渡到河的另一边,但它不会游泳。所以唯一的希望就是跳到河上的岩石上,这些岩石呈直线排列。岩石的位置从开始位置开始测量,假设兔子从0厘米处开始。对岸可以看作是一块大石头。它是岩石元组中的最后一块岩石 例如,岩石位于位置32、46、70、85、96、123处,对面河岸位于位置145处。 对于上面的示例,它需要在岩石0(起点)、岩石46和岩石96处进行3次跳跃才能到达另一侧(岩石146) 兔子每跳一次都会跳得尽可能远。到达河对岸所需的最小跳跃次数是多少 你可以假设最多有20块

兔子最多能跳50厘米远。它想渡到河的另一边,但它不会游泳。所以唯一的希望就是跳到河上的岩石上,这些岩石呈直线排列。岩石的位置从开始位置开始测量,假设兔子从0厘米处开始。对岸可以看作是一块大石头。它是岩石元组中的最后一块岩石

例如,岩石位于位置32、46、70、85、96、123处,对面河岸位于位置145处。 对于上面的示例,它需要在岩石0(起点)、岩石46和岩石96处进行3次跳跃才能到达另一侧(岩石146)

兔子每跳一次都会跳得尽可能远。到达河对岸所需的最小跳跃次数是多少

你可以假设最多有20块岩石(包括对岸)

编写一个函数rabbit,读取表示岩石位置的元组。您的函数应该返回所需的最小跳跃次数,如果兔子无法到达河的另一边,则返回-1。您可以假设岩石在元组中的位置是有效的(大于0),并且它们是按升序排序的

def rabbit(rocks):
    jumps = 0
    prev = 0
    cursor = 0
    i = 0
    while i < len(rocks):
        rock = rocks[i]
        if rock - prev < 50:
            cursor = rock
            i += 1
            continue
        elif rock - prev >= 50 and prev != cursor:
            jumps += 1
            prev = cursor
            continue
        else:
            return -1

    if i == len(rocks):
        rock = rocks[i-1]
        if rock - prev <= 50:
            jumps += 1

    if jumps == 0:
        return -1
    return jumps
def兔子(岩石):
跳跃=0
prev=0
光标=0
i=0
而我(岩石):
岩石
如果rock-prev<50:
光标=岩石
i+=1
持续
elif rock-prev>=50和prev!=光标:
跳跃+=1
prev=光标
持续
其他:
返回-1
如果i==len(岩石):
岩石=岩石[i-1]

如果rock-prev我更改了部分代码,如下所示

if rock - prev <= 50:
    cursor = rock
    i += 1
    continue
elif rock - prev > 50 and prev != cursor:
    jumps += 1
    prev = cursor
    continue

使用递归的替代解决方案:

def rabbit(rocks, jumps=0):
    max_jump = max(element for element in rocks if element <= 50)
    last = rocks[-1]
    if max_jump >= last:
        return jumps + 1

    else:
        return rabbit([rock - max_jump for rock in rocks if rock > 50], jumps + 1)

print(rabbit([32, 46, 70, 85, 96, 123, 145]))
print(rabbit([30, 70, 75, 120, 160, 170, 180, 190, 200, 246, 258]))
以下是我的解决方案:

MAX_JUMP_DIS = 50


def rabbit(rocks):
    ans_rock = []

    def jump(rocks, cur_pos=0):
        list_possible = [rock for rock in rocks if rock <= MAX_JUMP_DIS + cur_pos]
        if len(list_possible) == 0:
            return -1
        jump_pos = max(list_possible)
        ans_rock.append(jump_pos)
        [rocks.remove(rock) for rock in list_possible]
        if len(rocks) != 0:
            return jump(rocks, cur_pos=jump_pos)

    if jump(rocks) == -1:
        print(-1)
    else:
        print(f"rock list: {ans_rock} count:{len(ans_rock)}")


rabbit([32, 46, 70, 85, 96, 123, 7000])
rabbit([32, 46, 70, 85, 96, 123, 145])
rabbit([30, 70, 75, 120, 160, 170, 180, 190, 200, 246, 258])

您的代码看起来很好,尝试修改代码以在计算步骤之前检查一步。这就是我有点迷路的地方。我似乎不知道如何提前检查一个步骤
兔子((30,70,75,120,160,170,180,190,200,246,258))的答案应该是什么
,你能概述一下你将如何得到
兔子((32,46,70,85,96,123,145))的答案
第二个答案是15吗?不是应该是7吗?如果你的条件有点偏离,我在下面的回答中提供了正确的条件@ShehanDhaleesha,请看一看,很高兴能提供帮助!如果我的回答对你有帮助,请接受并投票支持@tanteidaiko:)
3
7
MAX_JUMP_DIS = 50


def rabbit(rocks):
    ans_rock = []

    def jump(rocks, cur_pos=0):
        list_possible = [rock for rock in rocks if rock <= MAX_JUMP_DIS + cur_pos]
        if len(list_possible) == 0:
            return -1
        jump_pos = max(list_possible)
        ans_rock.append(jump_pos)
        [rocks.remove(rock) for rock in list_possible]
        if len(rocks) != 0:
            return jump(rocks, cur_pos=jump_pos)

    if jump(rocks) == -1:
        print(-1)
    else:
        print(f"rock list: {ans_rock} count:{len(ans_rock)}")


rabbit([32, 46, 70, 85, 96, 123, 7000])
rabbit([32, 46, 70, 85, 96, 123, 145])
rabbit([30, 70, 75, 120, 160, 170, 180, 190, 200, 246, 258])
-1
rock list: [46, 96, 145] count:3
rock list: [30, 75, 120, 170, 200, 246, 258] count:7