Задача
Напишите программу, которая выводит элемент из строки $x$ и столбца $y$ матрицы размера $n × m$, которая заполнена змейкой:
Входные данные
Даны натуральные числа $n, m, x, y (1 \leqslant x \leqslant n \leqslant 50, 1 \leqslant y \leqslant m\leqslant 50)$. Здесь $n$- количество строк матрицы, $m$ — количество столбцов матрицы, $x$ и $y$ — номера строки и столбца искомого элемента.
Выходные данные
Вывести элемент из строки $x$ и столбца $y$.
Решение
Для решения создаётся матрица в представлении массива размера $n* m$, который заполняется следующим образом: если текущая строка матрицы нечётная, то элемент массива принимает значение номера строки, умноженного на количество $m$ столбцов матрицы плюс номер текущего столбца, а если текущая строка — чётная, то текущему элементу массива присваивается значение, равное произведению увеличенного на единицу номера $n$ строки на количество $m$ столбцов матрицы минус увеличенный на единицу номер текущего столбца. Для вывода значения матрицы по двум координатам мы используем элемент массива с индексом равным сумме координаты $y$ на произведение координаты $x$ на количество столбцов $m$, которое используется для «прыжка» через необходимое количество строк.
Тесты
№ | Ввод | Вывод |
---|---|---|
1 | 5 2 3 1 | 4 |
2 | 4 5 3 1 | 10 |
3 | 50 48 45 20 | 2131 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; int main() { int n, m, x, y; cin >> n >> m >> x >> y; x--, y--; int *arr = new int[n * m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { arr[i * m + j] = (i % 2 == 0 ? i * m + j : (i + 1) * m - (j + 1)); } } cout << arr[x * m + y]; return 0; } |
Ссылки
Для отправки комментария необходимо войти на сайт.