Câu hỏi

26/04/2013 21:45
Tạo mảng 2 chiều nxn phần tử nguyên. Sắp xếp các phần tử theo chiều tăng dần và in theo chiều xoáy chôn ốc
tạo mảng 2 chiều gồm n hàng, n cột. Sắp xếp các phần tử theo chiều tăng dần và đưa ra màn hình theo chiều xoáy chôn ốc
Handoivodoi
26/04/2013 21:45
Handoivodoi
26/04/2013 21:45
Danh sách câu trả lời (2)

Dành cho ai ko thíc đi theo đường thẳng!
nếu muốn sx các phần thử thì bạn chỉ cần dùng phương pháp sắp xếp bằng tráo đổi rồi đặt các giá trị vào chỗ thíc hợp trên mảng!
nếu sx hình xoáy trôn ốc thì chỉ viêvj sắp xếp bình thường theo hàn cột rùi copy nó sang 1 mảng khác thoi!
giả sử :
12345 ---> 10987
67890 23456
![[:D]](/images/wys/yahoo_bigsmile.gif)
nếu muốn sx các phần thử thì bạn chỉ cần dùng phương pháp sắp xếp bằng tráo đổi rồi đặt các giá trị vào chỗ thíc hợp trên mảng!
![[;;)]](/images/wys/yahoo_batting.gif)
nếu sx hình xoáy trôn ốc thì chỉ viêvj sắp xếp bình thường theo hàn cột rùi copy nó sang 1 mảng khác thoi!
giả sử :
12345 ---> 10987
67890 23456

Phương pháp làm đơn giản nhất là xét giá trị của từng mảng vuông 2x2 rồi đưa ra mảng lớn nhất.
-Xét 1 phần tử a[i,j] khi đó đặt b[k]=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+1,j+1]; với 1<=i,j<=n-1 >>> có tất cả là (n-1)*(n-1) mảng con 2x2; ~~> ta sẽ khai báo 1 mảng 2 chiều B có kích thước (n-1)x(n-1).
mảng con 2x2 sẽ được xác định bằng phần tử A[i,j] coi là phần tử [1,1] của mảng con, 3 phần tử còn lại là a[i+1,j],a[i,j+1],a[i+1,j+1] tương ứng.
for i:=1 to n-1 do
for j:=1 to n-1 do
b[i;j]:=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+1,j+1];
~~>ở đây giá trị b[i,j] là giá trị của tổng các ổ của mảng con 2x2 có phần tử đầu tiên = a[i,j]...tìm được b[i,j]~~>i,j~~>a[i,j]~~~>mảng con 2x2 tương ứng.
==> công việc tiếp theo đó là tìm giá trị lớn nhất trong các phần tử của mảng B. ở đây ta phải giữ nguyên vị trí của các phần tử, ko đc dùng sắp xếp để tìm giá trị max.
Khai báo 1 biến max,
max:=b[1,1];
for i:=1 to n-1 do
for j:=1 to n-1 do
if b[i,j]> max then max:=b[i,j];
~~~>max là giá trị lớn nhất trong các phần tử của mảng B.
sẽ có trường hợp có nhiều phần tử lớn nhất bằng nhau nên ta sẽ xét lần lượt,
for i:=1 to n-1 do
for j:=1 to n-1 do
if b[i,j]=max then
begin
{...
in ra giá trị của:
a[i,j] a[i,j+1]
a[i+1,j] a[i+1,j+1]}
end;
...bài toán có thể có nhiều nghiệm, có bao nhiêu in ra kết quả bấy nhiêu...
-Xét 1 phần tử a[i,j] khi đó đặt b[k]=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+1,j+1]; với 1<=i,j<=n-1 >>> có tất cả là (n-1)*(n-1) mảng con 2x2; ~~> ta sẽ khai báo 1 mảng 2 chiều B có kích thước (n-1)x(n-1).
mảng con 2x2 sẽ được xác định bằng phần tử A[i,j] coi là phần tử [1,1] của mảng con, 3 phần tử còn lại là a[i+1,j],a[i,j+1],a[i+1,j+1] tương ứng.
for i:=1 to n-1 do
for j:=1 to n-1 do
b[i;j]:=a[i,j]+a[i+1,j]+a[i,j+1]+a[i+1,j+1];
~~>ở đây giá trị b[i,j] là giá trị của tổng các ổ của mảng con 2x2 có phần tử đầu tiên = a[i,j]...tìm được b[i,j]~~>i,j~~>a[i,j]~~~>mảng con 2x2 tương ứng.
==> công việc tiếp theo đó là tìm giá trị lớn nhất trong các phần tử của mảng B. ở đây ta phải giữ nguyên vị trí của các phần tử, ko đc dùng sắp xếp để tìm giá trị max.
Khai báo 1 biến max,
max:=b[1,1];
for i:=1 to n-1 do
for j:=1 to n-1 do
if b[i,j]> max then max:=b[i,j];
~~~>max là giá trị lớn nhất trong các phần tử của mảng B.
sẽ có trường hợp có nhiều phần tử lớn nhất bằng nhau nên ta sẽ xét lần lượt,
for i:=1 to n-1 do
for j:=1 to n-1 do
if b[i,j]=max then
begin
{...
in ra giá trị của:
a[i,j] a[i,j+1]
a[i+1,j] a[i+1,j+1]}
end;
...bài toán có thể có nhiều nghiệm, có bao nhiêu in ra kết quả bấy nhiêu...
Trả lời câu hỏi
Câu hỏi lĩnh vực Lập trình
Rao vặt Siêu Vip