题目:
小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
分析:
水题,暴力求解。
代码:
const
maxn=100;
var
a:array[1..maxn,1..maxn] of longint;
n:longint;
procedure init;
begin
readln(n);
end;
procedure main;
var
i,j,k,len,temp,ans:longint;
begin
k:=1;len:=1;i:=(n+1) div 2;j:=(n+1) div 2;a[i,j]:=1;
repeat
inc(j);inc(k);a[i,j]:=k;
for temp:=1 to len do
begin
inc(k);
dec(i);
a[i,j]:=k;
end;
for temp:=1 to len+1 do
begin
inc(k);
dec(j);
a[i,j]:=k;
end;
for temp:=1 to len+1 do
begin
inc(k);
inc(i);
a[i,j]:=k;
end;
for temp:=1 to len+1 do
begin
inc(k);
inc(j);
a[i,j]:=k;
end;
inc(len,2);
until len=n;
ans:=0;
for i:=1 to n do
begin
for j:=1 to n do
begin
write(a[i,j],' ');
if (i=j) or (i+j=n) then
ans:=ans+a[i,j];
end;
writeln;
end;
writeln(ans);
end;
begin
init;
main;
end.