1, 2, 3, 4
Объяснение:
Введем обозначения:
a = X > 0, b = X > 4
Тогда выражение будет иметь вид (a + b) → b и нужно найти условия, когда оно ложно. Вместо этого, мы будем искать, когда отрицание этого условия истинно, т.е. истинность ¬( (a + b) → b)
Для начала избавимся от импликации
¬( ¬(a + b) + b)
А теперь примерим к внешнему отрицанию закон де-Моргана
(a + b) · ¬b
Раскрываем скобки
a · ¬b + b · ¬b
a · ¬b + 0
a · ¬b
Делаем обратную замену
( X > 0) · ¬(X > 4)
( X > 0) · (X ≤ 4)
Переведем это на более понятный язык:
X > 0 И X ≤ 4, или
0 < X ≤ 4
Из целых чисел сюда подойдут 1, 2, 3, 4.
int main() {
// Something
int a[n][m];
// Init
// Находим максимум
int im = 0, jm = 0, max = a[0][0];
for (int i = 0 ; i < n; ++i)
for (int j = 0; j < m; ++j)
if (a[i][j] > max) {
max = a[i][j];
im = i;
jm = j;
}
// Двигаем максимум вниз
swapCollumn(a, n, m, im, n-1);
swapRow(a, n, m, jm, m-1);
}
//Премещаем 2 столбца местами
void swapCollumn(int ** a, int n, int m, int c1, int c2) {
if (c1 < 0 || c2 < 0 || c1 >= n || c2 >= n)
return;
for (int i = 0; i < m; ++i)
swap(&a[c1][i], &a[c2][i]);
}
//Перемещаем 2 строки местами
void swapRow(int ** a, int n, int m, int r1, int r2) {
if (r1 < 0 || r2 < 0 || r1 >= m || r2 >= m)
return;
for (int i = 0; i < n; ++i)
swap(&a[i][r1], &a[i][r2]);
}
void swap(int * el1, int el2) {
int t = *el1;
*el1 = *el2;
*el2 = *el1;
}