Задача
По данному числу [latex]n[/latex] заполните квадратную матрицу размером [latex]n*n[/latex] целыми числами от [latex]1[/latex] до [latex]n^{2}[/latex] следующим образом:
Входные данные
Одно целое число [latex]n[/latex] [latex](1 \leqslant n \leqslant 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 |
#include <iostream> using namespace std; int main() { int n; cin >> n; int flag_even = 1; int flag_odd = 1; for(int i = 0; i < n; i++){ if(i%2 == 0){ for(int j = 0; j < n; ++j){ cout << flag_even << " "; ++flag_even; } cout << endl; flag_odd = flag_even + n - 1; } else{ for(int j = 0; j < n; ++j){ cout << flag_odd << " "; --flag_odd; } cout << endl; flag_even += n; } } return 0; } |
Решение
Создаем переменные
flag_even для четных строк и
flag_odd для нечетных. Они будут содержать значение элемента матрицы на каждом шаге алгоритма в соответствующих строках.
Следует обратить внимание, что в условии указано, что числа идут слева направо в нечётных строках, и справа налево — в чётных, но в массивах нумерация идет с [latex]0[/latex] (четное число), поэтому в коде условие обратное.
В циклах выполняем операции и сразу же печатаем элементы матрицы.
По оформлению:
— Меньше либо равно у нас принято обозначать иначе. Найдите в LaTeX другой способ.
— В тестах пустые строки лучше удалить.
— В описании решения лучше описывать алгоритм, а не код. Код и сам себя отлично описывает, если вы не хотите отметить какой-то интересный инструмент или трюк.
По алгоритму. К сожалению такое решение очень избыточно использует ресурсы. Заводить массив и последовательно его заполнять, потом опять же последовательно печатать его элементы ненужно. Вообще массива здесь не нужно. Только печать.
Хорошо.
Я, кстати, так решал: