Программный вывод неверен - PullRequest
0 голосов
/ 14 июля 2020

Привет всем, я сейчас занимаюсь решением проблемы, однако после того, как я застрял более двух недель без выхода, я решил обратиться к переполнению стека.

Проблема:

Автобусный тур по Европе оказался очень успешным. В связи с увеличением числа желающих на go тур, туристическая компания решила увеличить высоту автобуса. Новая высота автобуса - ровно N сантиметров.

Но маршрут тура проходит под множеством мостов, и есть вероятность, что автобус sh врежется в один из этих мостов. Можете ли вы узнать, произойдет ли это?

Первая строка ввода содержит высоту автобуса и количество мостов, под которыми проходит автобус. Во второй строке указаны высоты этих мостов.

Вы должны вывести "Will not cra sh", если все будет в порядке; в противном случае выведите «Будет взломать sh на мосту i» (где i - номер моста), в который шина проникнет sh. Если высота моста равна высоте автобуса, автобус будет треснуть sh.

Код:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        int busHeight = s.nextInt();
        int bridgeCount = s.nextInt();
        int bridgeHeight;
        boolean willCrash = false;
        int count = 0;

        for (int i = 0; i < bridgeCount; i++) {
            bridgeHeight = s.nextInt();

            if (bridgeHeight == busHeight || bridgeHeight < busHeight) {
                willCrash = true;
                count++;
            }
            if (!(bridgeCount - count != 0 && willCrash)) {
                System.out.println("Will not crash");
                break;
            } else {
                System.out.println("Will crash on bridge " + (bridgeCount - count));
                break;
            }
        }
    }
}

Пример ввода: 234 8 465 453 981 463 1235 871 475 981

Правильный вывод: не треснет sh

Мой вывод: не треснет sh

Пример ввода 2: 211 5 871 205 123 871 1681

Пример вывода: будет трещать sh на мосту 2

Мой вывод: не трещит sh

1 Ответ

2 голосов
/ 14 июля 2020

Давайте go шаг за шагом по вашему коду ...

    ....

    for (int i = 0; i < bridgeCount; i++) {
        bridgeHeight = s.nextInt();

В этом есть смысл!

        if (bridgeHeight == busHeight || bridgeHeight < busHeight) {
            willCrash = true;
            count++;
        }
  1. Вы можете вырезать часть дополнительная работа здесь с использованием оператора <=! </p>

  2. Количество мостов не изменится. Вероятно, нам не следует обновлять здесь переменную count.

         if (!(bridgeCount - count != 0 && willCrash)) {
             System.out.println("Will not crash");
             break;
    

Похоже, вы все еще в своем for l oop! Мы не можем точно знать, что sh не взломаем, пока не пройдем все остальные мосты.

        } else {
            System.out.println("Will crash on bridge " + (bridgeCount - count));
            break;
        }

Я не уверен, почему вы решили использовать bridgeCount - считайте как индекс вашего моста . I в построенном нами for l oop должно отслеживать, на каком мосте мы находимся!

Давайте попробуем написать немного исправленного кода:

for (int bridgeIndex = 0; bridgeIndex < bridgeCount; bridgeIndex++) {
   bridgeHeight = s.nextInt();
   
   if (bridgeHeight <= busHeight) {
     willCrash = true;
     // We know where our bus will crash. Let's abandon ship now!
     System.out.println("Will crash on bridge " + bridgeIndex);
     break;
   }
} // end our for loop here!
if (!willCrash) {
   // We got through every element of the for loop and none of them caused a crash!
   System.out.println("Will not crash.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...