Ау, коллеги-математики, требуется помощь!
Полез в Вики:
Магический квадрат — Википедия , там в разделе "Прочие способы" (первый абзац) есть простенькая формула, правда годится только для нечетных n > 3. Ну мгновенно нарисовал программку:
Код:
VAR
N,i,j,a:LongInt;
BEGIN
Write('Enter ODD order of magic square ');
ReadLn(N);
For i:=1 to N do
begin
for j:=1 to N do
begin
a:=1+((i-j+(N-1) div 2) mod N)*N+
((i+j+(N+1) div 2) mod N);
Write(a:3);
end;
WriteLn;
end;
ReadLn;
END.
да только беда в том, что врет она. Т.е. считает правильно только элементы главной диагонали и ниже, а к верхнему правому углу начинает выдавать полную бредятину (отрицательные числа и т.п.). Вот сижу, смотрю и не недоумеваю - то ли формула дурная, то ли я ее не так понимаю, то ли в программе лажа. Идеи?
P.S. Со знаками воевать пытался: вставлял ABS в разные места - не помогает. Всё равно чушь, хоть и положительная.