Задача
Напишите программу, которая выводит элемент из строки [latex]x[/latex] и столбца [latex]y[/latex] матрицы размера [latex]n × m[/latex], которая заполнена змейкой:
Входные данные
Даны натуральные числа [latex]n[/latex], [latex]m[/latex], [latex]x[/latex], [latex]y[/latex] [latex](1 ≤ x ≤ n ≤ 50, 1 ≤ y ≤ m ≤ 50)[/latex]. Здесь [latex]n[/latex] — количество строк матрицы, [latex]m[/latex] — количество столбцов матрицы, [latex]x[/latex] и [latex]y[/latex] — номера строки и столбца искомого элемента.
Выходные данные
Вывести элемент из строки [latex]x[/latex] и столбца [latex]y[/latex].
Тесты
Входные данные | Выходные данные | |
[latex]5 \; 2 \; 3 \; 1[/latex] | [latex]4[/latex] | |
[latex]6 \; 3 \; 4 \; 3[/latex] | [latex]9[/latex] | |
[latex]10 \; 5 \; 10 \; 2[/latex] | [latex]48[/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 |
#include <iostream> using namespace std; int main() { int n, m, x, y; cin >> n >> m >> x >> y; int arr[n][m]; int num = 0; for(int i = 0; i < n; ++i) { int dir, j; if(i % 2 == 0){ j = 0; dir = 1; } else { j = m-1; dir = -1; } for(; j < m&&j >= 0; j+= dir) { arr[i][j] = num; ++num; } } cout << arr[x - 1][y - 1]; return 0; } |
Решение задачи
Читаем входные данные и объявляем массив $n$ на $m$, $num = 0$ — число элемента в этом массиве, далее будем заполнять его в цикле. Делаем перебор строк, для каждой строки есть число $j$ — номер элемента (в текущей строке), с которого мы записываем числа и число $dir$ — направление, в которое мы эти числа записываем (оно у нас 1 или -1). Если строка четная, то начинаем движение слева направо, если нечетная, то справа налево. Далее перебираем каждый элемент строки и записываем ему свой номер. В ответе выводим выбранный элемент.
Ссылки
Условие задачи на e-olymp
Код решения на ideone