【问题标题】:Wrong output: Some test cases are failing while other test cases are passing错误输出:一些测试用例失败,而其他测试用例通过
【发布时间】:2020-07-12 13:46:11
【问题描述】:

编写了一个程序来确定艾玛从起始位置跳到最后一朵云所需的最少跳跃次数。

这是完整的问题:https://www.hackerrank.com/challenges/jumping-on-the-clouds/problem

某些测试用例失败了。

示例 1:

输入:1. 50

  1. 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0

预期输出:28

示例 2:

输入:1. 100

  1. 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0

预期输出:53

示例 3:

输入:1. 100.

  1. 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 1 0

预期输出:54

示例 4:

  1. 85

  2. 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0

预期输出:46

以上 4 个测试用例不符合下面给出的程序。

下面编写的代码没有提供所需的输出有什么问题?

def jumpingOnClouds(c):
    moves = 0
    i=0
    while i < len(c)-1:
        if c[i] == 0:
            try:
                if c[i]==c[i+2]:
                    moves+=1
                    i+=2
            except:
                pass
            try:
                if c[i]==c[i+1]:
                    moves+=1
                    i+=1
            except:
                pass

    return moves

【问题讨论】:

  • 您的代码在[0, 0, 0, 0, 0] 上失败。

标签: python python-3.x


【解决方案1】:

如果遇到异常,则不会增加索引。所以如果输入是这样的,它可能会陷入无限循环:[0 1 0 0]。首先从 0 开始。然后转到索引 2。在下一次迭代中,您将访问超出范围的 a[4]。您将捕获异常。但是程序陷入了无限循环,因为你没有增加索引,所以它永远不会结束。

这是您方法的改进版本:

def min_moves(a, n):
    i = 0
    moves = 0
    while i < n-1:
        if i+2 < n and a[i+2] == 0:
            i += 2
            moves += 1
            continue

        if i+1 < n and a[i+1] == 0:
            i += 1
            moves += 1
            continue

    return moves

【讨论】:

  • 对于第一个例子,我实际上得到了一个输出。但是,虽然预期的输出是 28,但我得到的输出是 32。
  • 只是对您的方法进行了一些小的改进。您的方法直到数组的最后一个元素为止。
  • @AnishNarayan 你能举一个我的代码将失败的示例输入吗?
  • 当两个“if”条件都失败时,变量“i”不会增加。只有这样我们才能转到数组中的下一个元素。 'if' 条件还应检查 a[i] 和 a[i+2] 是否相等(或者在第二个 'if' 条件的情况下 a[i+1] 和 a[i] 是否相等)。 while i
  • 问题是,赢得比赛总是有可能的。因此,不会发生两种情况都失败的情况。另外,我已经提交了我的代码,它通过了所有的 TC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2011-03-29
  • 2018-12-02
相关资源
最近更新 更多