第1题:幻方
把1至n×n的正整数填在n行n列的表格内,使每一行、每一列和二条多角线上n个数之和都相等。这样的正方形表格叫做幻方。如右图所示是一个3行3列的幻方。
下面的程序生成一个行(列)数为奇数的幻方。如果输入的行列数n是偶数,输出字符串”not odd number!”,否则按一下的方法生成幻方:
1. 第一个数1填入第一行最中间的一列;
2. 以后每次填下一个数时,填入的位置为:
(1) 如果已填的数的个数为n的倍数,则填入下一行;
(2) 否则填入上一行右一列。如果向上越界,则填至最后一行;如果向右越界,填至第一列。生成的数字保存在二维数组a中,程序输出n行,每行n个数据。
【样例输入】
3
【样例输出】
8 1 6
3 5 7
4 9 2
请将程序补充完整。
program xx2011_5;
const maxn=1001;
var n,i,j,p:longint;
a:array[1..maxn,1..maxn]of longint;
begin
readln(n);
if n mod 2=0 then begin
wrtieln(‘not odd number!’);
exit ;
end;
i:=1;
j:=(n+1) div 2 ;
for p:=1 to n*n do begin
a[i,j]:=p;
if p mod n=0 then i:=i+1
else begin
i:=i-1;j:=j+1;
if i<1 then i:=n;
if j>n then j:=1;
end;
end;
for i:=1 to n do begin
for j:=1 to n-1 do
write(a[i,j],’ ‘);
writeln(a[i,n]) ;
end;
end.