Хотя мы можем только строить догадки о том, что беспокоит лектора, можно сделать некоторые объективные соображения относительно задачи нахождения наибольшего четного числа под главной диагональю в матрице.
Я сосредоточусь только на поисковом цикле, а не на общей реализации и других проблемах в коде OP, например, за пределами доступа.
Когда диапазон значений сканируется, чтобы найти максимум, мы обычно сравниваем каждый элемент с переменной, скажем, max
, которая содержит большее найденное значение и которая обновляется при обнаружении большего значения. Однако следует учитывать некоторые соображения:
Максимум может не существовать. Если диапазон пуст, мы не можем инициализировать max
значением определенного элемента. Там нет такого элемента. Например, в случае OP не может быть четного числа под диагональю (на самом деле их ошибка в том, что max
инициализируется значением неинициализированного элемента, который также может находиться за пределами выделенного массива).
Мы можем инициализировать max
с минимальным возможным значением для типа элементов. В случае значений int
это std::numeric_limits<int>::min()
, что может быть действительно очень большим отрицательным числом (даже тоже). Проблема в том, что это допустимое возможное значение, поэтому, если мы проверяем только для строго больших значений и у нас есть только это значение, мы пропускаем максимальное.
Кроме того, в данном конкретном случае вместо обхода всей матрицы, проверяющей, находится ли каждый элемент под диагональю, мы можем просто пройти только по нижней левой части матрицы.
Следующий фрагмент показывает, как эти соображения могут быть приняты во внимание:
#include <limits>
int max = std::numeric_limits<int>::min();
bool found = false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) { // only the elements of a square matrix under the diagonal
if ( a[i][j] >= max && a[i][j] % 2 == 0 ) {
max = a[i][j];
found = true;
}
}
}
EDIT:
Как указано в комментариях @ user3386109 , с небольшим изменением внутреннего состояния можно инициализировать max
более удобным значением, например 0:
if ( (!found || a[i][j] > max) && a[i][j] % 2 == 0)
// ^^^^^^ checks if it's the first