Заполнить двумерный массив по правилу

Задача

Заполнить двумерный массив по следующему правилу:

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. На главной диагонали располагаются единицы. Далее по диагоналям над и под главной идут двойки, затем диагонали троек и четверок. Заканчивается все угловыми пятерками.
  2. От единиц главной диагонали по столбцам и по строкам, т. е. по вертикали и по горизонтали, натуральные числа последовательно увеличиваются на 1.
  3. Числа в строках последовательно смещаются на одну ячейку вправо. При этом освободившиеся ячейки слева заполняются числами в обратном порядке.

Ниже представлено заполнение двумерного массива с учетом второго правила. Сначала формируется главная диагональ из единиц. Затем заполняется часть матрицы, расположенная под диагональю. При этом изменяется номер строки, индекс столбца остается постоянным. Т. е. для заполнение идет по вертикали. Значение элемента вычисляется исходя из предыдущего + 1.

Далее заполняется верхняя часть матрицы. Здесь заполнение идет по строкам, так как меняется второй индекс.

const
    N = 5;
 
var
    mas: array[1..N,1..N] of byte;
    i, j, k, t: byte;
 
begin
    for i:=1 to N do // заполняем единицами диагональ
        mas[i,i] := 1;
 
    for i := 1 to N do
        for j := 1 to N do
            if (i = j) and (i < N) then begin
                k := i + 1;
                t := j;
                repeat // под диагональю заполнение по столбцам
                    mas[k,t] := mas[k-1,t] + 1;
                    inc(k);
                until k = N + 1;
                k := i;
                t := j + 1;
                repeat // над диагональю заполнение по строкам
                    mas[k,t] := mas[k,t-1] + 1;
                    inc(t);
                until t = N + 1;
            end;
 
    for i:=1 to N do begin
        for j:=1 to N do 
            write(mas[i,j]:3);
        writeln;
    end;
end.

 

Тема

Матрицы

Уровень

Сложные задачи

Последняя редакция

Комментарии