|
|
|
|
Пример:
Составить из чисел от 1 до К*К магический квадрат, в котором суммы чисел в каждом столбце, в каждой строке или диагонали одинаковы. Используем эвристический алгоритм, который позволяет построить магический квадрат, длина стороны которого нечетна. Все расставляемые числа делятся на группы от 1 до К, от К+1 до 2*К и так далее. Числа первой группы размещаются так, что в каждой строке и в каждом столбце находится ровно одно из них. Этот процесс повторяется для всех групп чисел.
Запишем план алгоритма:
Program MAGKV; const K=7; var i, n, c: Integer; kv: Array[1..K,1..K] of Integer; begin i:=1; n:=K div 2+1; for c:=1 to K*K do begin kv[i,n]:=c; if c mod K = 0 then i:=i+1 else begin dec(i); inc(n); if i <=0 then i:= k; if n > K then n:=1 end end; for i:=1 to K do begin for n:=1 to K do Write(kv[i,n]:4); Writeln end end.