Hihi :3 Bạn nào giải giúp mình với :< 60 điểm đó :D Yêu cầu: Tự giải, không tra mạng nhé :D Bạn nào chép mạng thì mình phạt đó :D ----- Viết chương trình in ra các số nguyên từ 1 đến $N^{2}$ theo hình xoắn ốc với N được nhập vào từ bàn phím. Ví dụ, với N=5 ta có: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
2 câu trả lời
Const maxN=101;
fi='XOANOC.INP';
fo='XOANOC.OUT';
Var a: array[0..MaxN,0..MaxN] Of Longint;
n,m: Longint;
Procedure Nhap;
Var i,j: Longint;
Begin
Assign(input,fi);
reset(input);
Read(n);
m:=n;
close(input);
end;
Procedure Xuat;
Var i,j: Longint;
Begin
Assign(output,fo);
rewrite(output);
For i:=1 to m do
begin
For j:=1 to n do
write(a[i,j],' ');
writeln;
end;
close(output);
end;
Function min(x,y: Longint):longint;
begin
min:=x;
if y<x then min:=y;
end;
Procedure taoA;
Var c1,c2,r1,r2,i,j,t,x: Longint;
begin
x:=0; c1:=1; c2:=n; r1:=1; r2:=m;
For t:=1 to (min(m,n)+1) div 2 do
begin
For j:=c1 to c2 do
begin
Inc(x); a[r1,j]:=x;
end;
inc(r1);
If n*m=x then exit;
For i:=r1 to r2 do
begin
Inc(x); a[i,c2]:=x;
end;
dec(c2);
If n*m=x then exit;
For j:=c2 downto c1 do
begin
Inc(x); a[r2,j]:=x;
end;
dec(r2);
If n*m=x then exit;
For i:=r2 downto r1 do
begin
Inc(x); a[i,c1]:=x;
end;
inc(c1);
If n*m=x then exit;
end;
end;
Begin
Nhap;
TaoA;
Xuat;
end.
Program hinh_xoan_oc;
Uses crt;
Var i,j,k,t,s,n: integer;
Begin
clrscr;
write('Nhap n: '); readln(n);
i:=1; j:=0;
s:=n; t:=1; k:=0;
for k:=1 to n*n do
begin
case t of
1 : j:=j+1;
2 : i:=i+1;
3 : j:=j-1;
4 : i:=i-1;
end;
gotoxy(j*3,i+2);
write(k);
if k=s then
begin
writeln;
n:=n-(t mod 2);
t:=t+1;
s:=s+n;
if t=5 then t:=1;
end;
end;
readln
end.