我该如何应对最后一跳?

时间:2019-04-23 05:00:58

标签: python python-3.x

兔子最多可以跳到50厘米远。它想越过河的另一边,但不会游泳。因此,唯一的希望就是跳上一条直线排列的河上的岩石。假设兔子在0厘米处开始,则从开始位置开始测量岩石的位置。对岸可被视为一块大石头。它是岩石元组中的最后一块岩石。

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

兔子每次跳都会跳得尽可能远。到达河的另一侧所需的最少跳数是多少?

您可能会假设最多有20块岩石(包括对岸)。

编写一个函数兔子,该兔子读取表示岩石位置的元组。您的函数应返回所需的最小跳数;如果兔子无法到达河的另一侧,则函数应返回-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

这里有些情况:

rabbit((32,46,70,85,96,123,145))应该生成3。但是我得到了4。

rabbit((30,70,75,120,160,170,180,190,200,246,258))并且在这种情况下。最后一跳有问题。尽管我得到了7的答案,但是代码的最后一部分似乎与第一种情况相矛盾。

3 个答案:

答案 0 :(得分:2)

我如下更改了部分代码。

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

由于兔子最多可以跳跃50条,这意味着它可以跳跃50条,因此必须为rock - prev <= 50,并且其跳跃不能超过50条,rock - prev > 50 and prev != cursor

此后,我得到的输出如下:


print(rabbit((32, 46, 70, 85, 96, 123, 145)))
#3
print(rabbit((30, 70, 75, 120, 160, 170, 180, 190, 200, 246, 258)))
#7

答案 1 :(得分:0)

使用递归的另一种解决方案:

mounted

输出:

<template>
  <div>
    <b-modal ref="my-modal" hide-footer title="Using Component Methods">
      <div class="d-block text-center">
        <h3>Hello From My Modal!</h3>
      </div>
      <b-button class="mt-3" variant="outline-danger" block @click="hideModal">Close Me</b-button>
      <b-button class="mt-2" variant="outline-warning" block @click="toggleModal">Toggle Me</b-button>
    </b-modal>
  </div>
</template>

<script>
  export default {
    methods: {
      showModal() {
        this.$refs['my-modal'].show()
      },
      hideModal() {
        this.$refs['my-modal'].hide()
      }
    },
    mounted() {
      this.showModal();
    }
  }
</script>

答案 2 :(得分:0)

这是我的解决方法:

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