Заполнить двумерный массив по правилу
Заполнить двумерный массив по следующему правилу:
1 2 3 4 5 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 5 4 3 2 1
Перед решением задачи необходимо найти правило расположения чисел в данной матрице. Можно увидеть несколько:
- На главной диагонали располагаются единицы. Далее по диагоналям над и под главной идут двойки, затем диагонали троек и четверок. Заканчивается все угловыми пятерками.
- От единиц главной диагонали по столбцам и по строкам, т. е. по вертикали и по горизонтали, натуральные числа последовательно увеличиваются на 1.
- Числа в строках последовательно смещаются на одну ячейку вправо. При этом освободившиеся ячейки слева заполняются числами в обратном порядке.
Под каждую описанную выше закономерность можно составить программу. Однако она будет достаточно сложной.
Вместо этого обратим внимание на следующее.
- Значения элементов матрицы можно связать с их же индексами. На главной диагонали первый индекс (i) равен второму (j). В этом случае в ячейки записывается единица.
- Если мы возьмем вторую ячейку первой строки, у которой i = 1, j = 2, то разница между ними составляет единицу. Однако нам надо записать в ячейку число 2. Значит прибавим к разнице число 1.
- Если взять первую ячейку второй строки [2, 1], разница между индексами составляет 1. Прибавив 1, получим 2.
Таким образом, приходим к формуле abs(i - j) + 1
.
const N = 7;
var
arr: array[1..N, 1..N] of byte;
i, j: byte;
begin
for i := 1 to N do begin
for j := 1 to N do begin
arr[i, j] := abs(j - i) + 1;
write(arr[i, j]:3);
end;
writeln;
end;
end.
Результат выполнения программы:
1 2 3 4 5 6 7
2 1 2 3 4 5 6
3 2 1 2 3 4 5
4 3 2 1 2 3 4
5 4 3 2 1 2 3
6 5 4 3 2 1 2
7 6 5 4 3 2 1
Пример решения похожей задачи в сообществе VK: Заполнить элементы массива последовательностью чисел: 2, 5, 10, 17, 26 …