Заполнить двумерный массив размерностью NxN (N нечетное число) целыми числами от 1 до N*N по следующим правилам: a) единица помещается в среднюю клетку первой строки; b) заполнение массива происходит по диагоналям вправо и ввер...

Заполнить двумерный массив размерностью NxN (N нечетное число) целыми числами от 1 до N*N по следующим правилам:  a) единица помещается в среднюю клетку первой строки;  b) заполнение массива происходит по диагоналям вправо и вверх;  c) при достижении верхней строки следующее число помещается в нижнюю строку так, как будто она находится над верхней строкой; d) при достижении крайнего правого столбца следующее число помещается в крайний левый столбец так, как будто он находится около крайнего правого столбца;  e) при достижении верхней клетки крайнего правого столбца следует опуститься на одну строку ниже в вертикальном порядке и продолжать заполнение клеток по правилу;  f) если клетка уже заполнена, следует опуститься на одну строку ниже в вертикальном порядке и продолжать заполнение клеток по правилу.
Гость
Ответ(ы) на вопрос:
Гость
Это алгоритм построения магического квадрата нечетного порядка [latex]m=1,3,5, ... \, 2n-1, \, n \in \mathbb N [/latex] Магическая константа (сумма числе по строке, столбцу или диагоналям) может быть найдена по формуле Баше де Мезириака: [latex]M= m \times \frac{m^2+1}{2} [/latex] Ниже приведена программа на языке Pascal.ABC. const   k = 29; var   m, n, i, j: integer;   a: array[1..k, 1..k] of integer; procedure rule_f; begin   if (i = 0) and (j = n + 1) then begin     i := 2;     j := n   end   else begin     if i = 0 then i := n;     if j = n + 1 then j := 1   end;   if a[i, j] <> 0 then   begin     i := i + 2;     j := j - 1;     rule_f   end   else     a[i, j] := m end; procedure rule_b; begin   i := i - 1;   j := j + 1 end; begin   write('Введите целое нечетное число не меньше, чем 3: ');   readln(n);   if (n mod 2) = 0 then writeln('Ошибка: Вы ввели четное число.')   else if n < 3 then writeln('Ошибка: число должно быть не меньше трех.')   else   begin     for i := 1 to n do       for j := 1 to n do         a[j, j] := 0;     i := 1;     j := (n + 1) div 2;     a[i, j] := 1;     for m := 2 to sqr(n) do     begin       rule_b;       rule_f     end;     writeln('Магический квадрат порядка ', n, ' с магической константой ',       (n * (sqr(n) + 1)) div 2);     for i := 1 to n do     begin       for j := 1 to n do write(a[i, j]:4);       writeln     end   end end. Тестовое решение: Введите целое нечетное число не меньше, чем 3: 5 Магический квадрат порядка 5 с магической константой 65   17  24   1   8  15   23   5   7  14  16    4   6  13  20  22   10  12  19  21   3   11  18  25   2   9
Не нашли ответ?
Ответить на вопрос
Похожие вопросы