题目:
小明玩一个数字游戏,取个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.
