Проблема при тестировании программы C++, измеряющей уровни над уровнем моря

У меня есть уни проект, задача: Мы летели из Европы в Северную Америку, и измеряли высоту над уровнем моря в равных последовательностях. Первое и последнее измерения проводились либо над континентом, либо над морем. Мы измерили положительную высоту, где мы были над землей, и 0, где мы были над морем.

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

Проблема в том, что код не работает в университетской системе онлайн-оценки, т.к.

  1. Я проверял, если островков нет, программа печатает 0 0, а должна печатать один 0.
  2. Кроме того, когда все острова имеют 0 долин, программа должна просто показать вывод первого острова, сейчас максимальное выделение не работает для этого случая (как вы думаете, это можно исправить, изменив только начальное значение maxV)

Не могли бы вы помочь мне с этими двумя пунктами?

     #include <iostream>

int main() {
    
    // Gets the number of heights
    unsigned int height_count;
    std::cin >> height_count; 
    
    // Get every height recorded and put it in an array
    unsigned short* heights = new unsigned short[height_count];
    for (int i = 0; i < height_count; ++i)
        std::cin >> heights[i];
    
    // We need to keep track of the following things:
    int island_start = -1, max_island_start = -1, max_island_end = -1;
    unsigned current_valley_count = 0, max_valley_count = 0;
    
    
    for (int i = 1; i < height_count-1; ++i) {
        if (heights[i] > 0 && heights[i-1] == 0) // If the coast starts
            island_start = i;
        else if (heights[i] > 0 && heights[i] <= heights[i-1] && heights[i] <= heights[i+1] && !(heights[i] == heights[i-1]) + (heights[i] == heights[i+1]) == 1) // If there is a valley
            ++current_valley_count;
        else if (heights[i] > 0 && heights[i+1] == 0) { // If the coast ends
            
            // Checks if the last island checked had the most valleys
            if (current_valley_count > max_valley_count) {
                max_island_start = island_start;
                max_island_end = i;
                max_valley_count = current_valley_count;
            }
            
            island_start = -1;
            current_valley_count = 0;
        }
    }
    
    
    std::cout << max_island_start+1 << " " << max_island_end+1 << std::endl;

    return 0;
}

Я не могу понять проблему: почему вывод для ввода примера не 8 10, а 3 6? Согласно определению, остров 1 3 1 4 кажется имеющим 0 долин, потому что никакие последовательные измерения не имеют одинаковых значений, но иснальд 2 1 1 имеет 1 долину.

MikeCAT 11.12.2020 13:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы напечатать один 0 вместо 0 0, вы должны добавить оператор if, чтобы проверить, не было ли островов, и изменить, что печатать в соответствии с этим.

Кроме того, начальное значение max_valley_count должно быть -1 вместо 0, чтобы на выходе мог появиться (первый) остров с 0 долинами. Я не думаю, что проблему можно решить, изменив начальное значение maxV, потому что maxV не используется в этом коде.

Еще один момент, в постановке задачи говорится

но только одно из B=A и B=C верно

С другой стороны, ваша программа говорит

!(heights[i] == heights[i-1]) + (heights[i] == heights[i+1]) == 1

Эта часть кода означает, что "истинно только одно из значений B!=A и B=C".

Вы должны удалить !.

Хорошо, спасибо ТАКЖЕ, я проверил это на случай, если есть один остров, и тогда код должен его напечатать. например: 3 0 2 0 результат должен быть 2 2

Boruv 11.12.2020 15:48

Другие вопросы по теме