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.

Câu hỏi trong lớp Xem thêm