Задача
Даны натуральное число [latex] n \geq 2 [/latex], действительная квадратная матрица порядка [latex] n [/latex]. Построить последовательность [latex] b_{1}, \ldots, b_{n} [/latex] из нулей и единиц, в которой [latex] b_{i} = 1 [/latex] тогда и только тогда, когда элементы [latex] i [/latex] строки образуют возрастающую или убывающую последовательность.
Тесты
Ввод | Вывод |
[latex] \begin{pmatrix} 1 & 2.5 & 3 & -5 & 2 \\ -7 & -4.5 & -2.8 & 0 & 1 \\ 8 & 3 & 0 & -2.9 & -4.62 \\ 8 & 3 & 3 & -2.9 & -4.62 \\ 1 & 2 & 3 & 3 & 4 \end{pmatrix} [/latex] | [latex] \begin{matrix} 0 \\ 1 \\ 1 \\ 0 \\ 0 \end{matrix}[/latex] |
Код на С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> using namespace std; int main() { int m, n; cin >> m >> n; double M[m][n]; bool monotone[m]; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) cin >> M[i][j]; for (int i = 0; i < m; i++) { bool check = true, diff; if (M[i][0] != M[i][1]) { diff = (M[i][1] > M[i][0]); for (int j = 2; j < n; j++) if ((M[i][j] == M[i][j-1]) || ((M[i][j] > M[i][j-1]) != diff)) { check = false; break; } } else check = false; monotone[i] = check; } for (int i = 0; i < m; i++) cout << monotone[i] << endl; return 0; } |
Код на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int m = in.nextInt(), n = in.nextInt(); double[][] M = new double[m][n]; boolean[] monotone = new boolean[m]; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) M[i][j] = in.nextDouble(); for (int i = 0; i < m; i++) { boolean check = true, diff; if (M[i][0] != M[i][1]) { diff = (M[i][1] > M[i][0]); for (int j = 2; j < n; j++) if ((M[i][j] == M[i][j-1]) || ((M[i][j] > M[i][j-1]) != diff)) { check = false; break; } } else check = false; monotone[i] = check; } for (int i = 0; i < m; i++) System.out.println(monotone[i]); } } |
Решение
1) Считываем матрицу
2) Просматриваем по очереди строки матрицы. Фиксируем знак разности первых двух элементов строки и пробегаем строку, сравнивая знак соседних элементов со знаком первых двух. Если последовательность убывает/возрастает, знаки всех пар должны совпадать со знаком первой и никакие два подряд идущих элемента не должны совпадать.
Зачем просматривать дважды, сначала проверяя на возрастание, потом (в любом случае) на убывание?
Вам нужно следить за сменой знака разности соседних элементов. И сделать это за один проход.
Исправил.
Задача не зачтена ещё с прошлого года. Видимо после очередных изменений Вы забыли поставить её на проверку.
Поставьте в тест вместо 0 ещё одну тройку. Почувствуйте разницу между возрастающей и неубывающей последовательностью.
Стоит бы пересмотреть код с высоты нового опыта.
Код и пример изменены. У меня была неверная программа: она не учитывала случай убывающей/невозрастающей последовательностей.