# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  Sắp xếp ma trận zic zac.

## seovg

Hãy sắp xếp mảng 2 chiều theo thứ tự sau:

----------


## dqua99

Chỉnh lại cái ảnh đi em. Mọi người không xem được kìa. Em up lên imageshack.us í. Mà hình như cái bài zic zac này đã có code rồi, em nên search lại.

----------


## nguyenthoa

Bài này chưa có code, nhưng nếu SpeedHunter nắm được code của bài xoắn ốc thì bài này và nhiều bài dạng này nữa sẽ nhàn thôi. Thuật toán chỉ là tìm vị trí đúng của số tự nhiên trong khoảng 1-> giới hạn cho trong mảng a[i,j]. Việc tìm vị trí này cũng kiểu như xoắn ốc. Bài này đầu tiên là tăng j tới m (cột), tới được m thì tăng i, gán 1 biến nào đấy để mình biết là đang giảm hay đang tăng. Sau đó giảm j, tới 1 thì lại thay giá trị biến kia và tăng i. Cứ như thế tới hết mảng thì thôi.

----------


## phamhuanmko

```
var   i,j,n:integer;
      a:array[1..100,1..100] of integer;
procedure sol;
var   h,k,j:integer;
begin
      h:=1; k:=1;
      repeat
            for j:=1 to n do
            begin
                  a[h,j]:=k;
                  inc(k);
            end;
            inc(h);
            for j:=n downto 1 do
            begin
                  a[h,j]:=k;
                  inc(k);
            end;
            inc(h);
      until k>sqr(n);
end;
begin
      write('Nhap n :'); readln(n);
      sol;
      for i:=1 to n do
      begin
            for j:=1 to n do
                  write(a[i,j],' ');
            writeln;
      end;
      readln
end.
```

tăng biến chạy hợp lí thôi

----------


## thutrang

> ```
> var   i,j,n:integer;
>       a:array[1..100,1..100] of integer;
> procedure sol;
> var   h,k,j:integer;
> begin
>       h:=1; k:=1;
>       repeat
>             for j:=1 to n do
> ...


Em không hỉu gì hết chọ Hằng ơi! Em test n=5 thì nó hiện ra cái mảng 2 chiều sắp xếp từ 1->25 mà ở đây đề ra là nhập mảng 2 chiều đó dzo ròy mới sắp xếp mà:whistling:

----------


## damtuyen232

àh , c tưởng là e cho nhập n . E cho c xin cái test ik

----------


## huahien

```
input
n=5
output
1  2  3  4  5
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
```

---------------------------------Bài viết đã được trộn ---------------------------------
test đúng nè


```
input
n=5
cứ cho từ 1->25 đi
output
1  2  3  4  5
10 9  8  7  6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
```

----------


## viponline

```
var   i,j,n,c,m:integer;
      a:array[1..100,1..100] of integer;
      b:array[1..100] of integer;
 
procedure sort;
var   i,j,tg:integer;
begin
      for i:=1 to m-1 do
            for j:=i+1 to m do
                  if b[i]>b[j] then
                  begin
                        tg:=b[i];
                        b[i]:=b[j];
                        b[j]:=tg;
                  end;
end;
 
procedure sol;
var   h,k,j:integer;
begin
      h:=1; k:=1;
      repeat
            for j:=1 to n do
            begin
                  a[h,j]:=b[k];
                  inc(k);
            end;
            inc(h);
            for j:=n downto 1 do
            begin
                  a[h,j]:=b[k];
                  inc(k);
            end;
            inc(h);
      until k>m;
end;
 
begin
      write('Nhap n :'); readln(n);
      for i:=1 to n do
      begin
            for j:=1 to n do
            begin
                  read(c);
                  inc(m); b[m]:=c;
            end;
            readln;
      end;
      sort;
      sol;
      writeln;
      for i:=1 to n do
      begin
            for j:=1 to n do
                  write(a[i,j],' ');
            writeln;
      end;
      readln
end.
```

Giải thix code : 
- Nhập n , mảng 2 chiều 
- Đọc mảng 2 chiều , lưu vào mảng 1 chiều 
- sx mảng 1 chiều
- tăng giảm biến chạy hợp lí để tạo mảng 2 chiều 
- in ra mảng 2 chiều

----------


## honghuebds

Phải tỏ ra mình là người lịch sự khi được người khác giúp đỡ!

----------

