Использование цикла for для проверки порядка чисел, убывания и увеличения порядка - PullRequest
0 голосов
/ 05 февраля 2019

Пользователь введет пять значений (диапазон 2-9) в массив.Затем предполагается, что код проверяет, находятся ли пять введенных значений в порядке убывания или увеличения.

Пример:

2, 3, 4, 5, 6 - приведет к boolзначение, установленное в 'true'

6, 5, 4, 3, 2 - будет иметь тот же результат, что и выше

Если, однако, есть два одинаковых номера или последовательность не впорядок, увеличивающийся или уменьшающийся, тогда значение bool равно 'false'

Пример:

2, 3, 2, 5, 6 - false

2, 3, 5, 4, 6 - ложь

7, 8, 6, 5, 4 - ложь

Я завершил два случая индивидуально, когда есть пара и при проверке увеличения ордера.

Для цикла, который я настроил для проверки возрастающего порядка / пары

for(int count = 0; count < 5; count++){
    if((cards[count] > cards[count + 1]) || (cards[count] == cards[count + 1]))
        result = false;
    else
        continue;
}

Для цикла, который я сделал для проверки убывающего порядка

for(int count = 0; count < 5; count++){
    if((cards[count] < cards[count+ 1]) || (cards[count] == cards[count + 1]))
        result = false;
    else
        continue;
}

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

Редактировать:

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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Монотонность можно проверить за один цикл.

bool isArrayMonotonic(std::vector<int>& arr) {
    if (arr.empty()) {
        return true;
    }
    bool isAscending = true, isDescending = true;
    int pre = arr[0];
    for (int i = 1; i < arr.size(); ++i) {
        isAscending = isAscending && arr[i] > pre;
        isDescending = isDescending && arr[i] < pre;
        pre = arr[i];
    }
    return isAscending || isDescending;
}
0 голосов
/ 05 февраля 2019

Во-первых, вам не нужно else continue; - это произойдет автоматически.

Во-вторых, вы на правильном пути, но у вас есть ошибка при обращении к массиву.Ваш цикл изменяется от 0 до 4 (когда он достигнет 5, он завершит цикл).Когда вы смотрите на элемент 4 (5-й элемент в массиве) массива и сравниваете его с элементом 5 (шестым элементом в массиве), вы сравниваете значение, которого там нет.Это может вызвать неопределенное поведение.

Решение состоит в том, чтобы установить условие в вашем цикле на < 4, чтобы в последнем цикле вы сравнивали второй с последним элемент с последним элементом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...