Неверный вывод: некоторые тестовые примеры не работают, а другие проходят. - PullRequest
0 голосов
/ 12 июля 2020

Написал программу для определения минимального количества прыжков, которое потребуется Эмме, чтобы перепрыгнуть из своей исходной позиции в последнее облако.

Вот полный вопрос: https://www.hackerrank.com/challenges/jumping-on-the-clouds/problem

Некоторые тестовые примеры не работают.

Пример 1:

Ввод: 1. 50

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

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.

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

1 Ответ

0 голосов
/ 12 июля 2020

Вы не увеличиваете индекс, если получаете исключение. Таким образом, он может застрять в бесконечном l oop, если ввод такой: [0 1 0 0]. Сначала вы начинаете с 0. Затем вы go индексируете 2. На следующей итерации вы получите доступ к [4], которое находится за пределами поля. Вы поймаете исключение. Но программа застряла в бесконечном l oop и никогда не закончится, поскольку вы не увеличили индекс.

Вот улучшенная версия вашего метода:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...