program test;
const
n=5;
var
i,j,k:integer;
a:array [1..n] of array [1..n] of integer;
begin
k:=1;
i:=1;
j:=1;
a[i,j]:=k;
for k:=2 to (n*n) do
if j=n
then begin
j:=i+1;
i:=n;
end
else if i=1
i:=j+1;
else begin
i:=i-1;
j:=j+1;
a[i.j]:=k;
for i:=1 to n do
for j:=1 to n do
write(a[i,j]," ");
writeln;
end;
end.
抱歉,我很久沒程式設計了,pascal還是初中學的,不知道能不能執行透過。大體應該是不錯的,細節可能存在問題。
稍微解釋一下,思路就是調整陣列的下標,給陣列中元素一次賦值1,2,3,。。。直到n*n停止。改變下標的原則是:
1.先判斷有沒有到列末尾(j=n),
1.1 到了就j:=i+1;i:=n;
1.2 不到就判斷有沒有到第一行(i=1),
1.2.1 到了就i:=j+1; j:=1;
1.2.2 不到就i:=i-1;j:=j+1;
然後給a[i,j]賦值。
program test;
const
n=5;
var
i,j,k:integer;
a:array [1..n] of array [1..n] of integer;
begin
k:=1;
i:=1;
j:=1;
a[i,j]:=k;
for k:=2 to (n*n) do
begin
if j=n
then begin
j:=i+1;
i:=n;
end
else if i=1
then begin
i:=j+1;
j:=1;
end
else begin
i:=i-1;
j:=j+1;
end
a[i.j]:=k;
end
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]," ");
writeln;
end;
end.
抱歉,我很久沒程式設計了,pascal還是初中學的,不知道能不能執行透過。大體應該是不錯的,細節可能存在問題。
稍微解釋一下,思路就是調整陣列的下標,給陣列中元素一次賦值1,2,3,。。。直到n*n停止。改變下標的原則是:
1.先判斷有沒有到列末尾(j=n),
1.1 到了就j:=i+1;i:=n;
1.2 不到就判斷有沒有到第一行(i=1),
1.2.1 到了就i:=j+1; j:=1;
1.2.2 不到就i:=i-1;j:=j+1;
然後給a[i,j]賦值。