У меня есть уни проект, задача: Мы летели из Европы в Северную Америку, и измеряли высоту над уровнем моря в равных последовательностях. Первое и последнее измерения проводились либо над континентом, либо над морем. Мы измерили положительную высоту, где мы были над землей, и 0, где мы были над морем.
Я попытался сделать код, и теперь у меня есть код, и когда я ввожу входные данные, он дает мне тот же результат, что и должен быть в задаче.
Проблема в том, что код не работает в университетской системе онлайн-оценки, т.к.
Не могли бы вы помочь мне с этими двумя пунктами?
#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;
}
Чтобы напечатать один 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
Я не могу понять проблему: почему вывод для ввода примера не
8 10
, а3 6
? Согласно определению, остров1 3 1 4
кажется имеющим 0 долин, потому что никакие последовательные измерения не имеют одинаковых значений, но иснальд2 1 1
имеет 1 долину.