Задача
По данному числу [latex]n[/latex] заполните квадратную матрицу размером [latex]n*n[/latex] целыми числами от [latex]1[/latex] до [latex]n^{2}[/latex] следующим образом:
Входные данные
Одно целое число [latex]n[/latex] [latex](1 ≤ n ≤ 100)[/latex].
Выходные данные
Вывести заполненную матрицу в виде [latex]n[/latex] строк по [latex]n[/latex] целых чисел в каждой.
Тесты
№ | Входные данные | Выходные данные |
---|---|---|
1 | 1 | 1 |
2 | 3 | 1 2 3 6 5 4 7 8 9 |
3 | 5 |
1 2 3 4 5 |
4 | 10 |
1 2 3 4 5 6 7 8 9 10 |
Код
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 |
#include <iostream> using namespace std; int main() { int n; cin >> n; int **x = new int* [n]; for(int i = 0; i < n; i++) x[i] = new int[n]; int flag = 1; for(int i = 0; i < n; i++){ if(i%2 == 0){ for(int j = 0; j < n; ++j){ x[i][j] = flag; ++flag; } } else{ for(int j = n-1; j >= 0; --j){ x[i][j] = flag; ++flag; } } } for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cout << x[i][j] << " "; } cout << endl; } for (int i = 0; i < n; i++) delete []x[i]; delete []x; return 0; } |
Решение
Создаем двумерный динамический массив
x и переменную
flag , которая будет содержать элемент матрицы на каждом шаге алгоритма.
Следует обратить внимание, что в условии указано, что числа идут слева направо в нечётных строках, и справа налево — в чётных, но в массивах нумерация идет с [latex]0[/latex] (четное число), поэтому в коде условие обратное.
В цикле по строкам: если номер строки четный, то выводим числа по возрастанию, иначе – по убыванию. На каждом шаге условного оператора увеличиваем значение
flag на [latex]1[/latex].
Выводим матрицу и не забываем очистить память.