Nhập vào mảng 2 chiều m x n phần tử. Sắp xếp mảng như sau:
Vi dụ:
Mảng nhập vào:
1 2 3
4 5 6
7 8 9
10 11 12
Sau khi sắp xếp:
1 8 9
2 7 10
3 6 11
4 5 12
Các bạn chỉ giúp mình thuật giải
Nhập vào mảng 2 chiều m x n phần tử. Sắp xếp mảng như sau:
Vi dụ:
Mảng nhập vào:
1 2 3
4 5 6
7 8 9
10 11 12
Sau khi sắp xếp:
1 8 9
2 7 10
3 6 11
4 5 12
Các bạn chỉ giúp mình thuật giải
cách làm:
1.Biến mảng 2c thành 1c rồi xếp tăng
2. Biến 2c thành 1c theo qui tắc:
2.1 chẵn....
2.2 lẻ.......
{hoặc có thể viết ra...trực tiếp}
@thuonghcm: theo mình nên nhập vào là mảng 1 chiều luôn cho đỡ tốn công (bước 1)
Còn việc đưa về mảng đích thì cứ gán ban đầu i(chỉ số hàng) j(chỉ số cột) =1
for j:=1 to số-cột
{nếu j lẻ thì duyệt for i:=1 to số-hàng
ngược lại for i:=số-hàng downto 1}
gán vào mảng.
Cuối cùng là in.
Cách giải đơn giản nhất là vậy thôi
@thuonghcm : sx sẵn rồi sx chi lại nữa.
Bài này không cần làm dài dòng như bạn bilun đâu. Thuật toán đơn giản hơn đó là cho tất cả các số vào 1 set, sau đó write số nào ra thì del số đó trong set đi, làm cho đến khi set rỗng. Tất nhiên khi write sẽ lưu ý đến tính chẵn/lẻ của cột.
Thuật toán đc biểu diễn như sau:
- read file => đưa từng giá trị tại ô ij vào 1 set.
- Gán 2 biến k,v = 1, repeat cho đến khi set A = []:
+ write(k)
+ for i := 2 to so_cot do {start từ cột 2 vì 1 đã write dòng trên}
o. Nếu i%2=0 thì write(j=(k+((n*2)-1)); A := A - j;
o. Ngược lại inc(v,2); write(j=k+v); A := A - j;
+ inc(k);
À, đầu tiên là làm sao để đưa đc số từ ma trận vào set. Và set thì chỉ 256 phần tử thôi. Còn 1 điều nữa, biến k và v ở đây dùng để biểu diễn số nào vậy?
write(j=(k+((n*2)-1)) :-??
Thuật giải bằng set có lẽ dùng cho FP hợp hơn, còn ý tui hỏi việc đưa số vào ma trận là do lúc đó tui hem để ý ông để luôn việc đưa vào set ở ngay trong input nên ko hình dung ra cách làm thôi
Cái này là pascal, cao siêu thế em nó còn lâu mới hiểu chời... giải thuật đơn giản như thế này
Đầu tiên
viết 1 hàm đão thứ tự 1 mãng 1 chiều (VD 1 2 3 --> 3 2 1 )
Kế tiếp
Chạy 2 vòng For, đổi thứ tự dòng thành cột
1 2 3
4 5 6
7 8 9
10 11 12
thành
1 5 9
2 6 10
3 7 11
4 8 12
Tiếp gọi cái hàm đảo mãng, đảo tất cả cột có giá trị chẳn
dể hiểu hông ???
@truong0805: cách của bạn xem ra còn khó làm hơn cách của mình.
goi bạn truong0805:
theo tui nghĩ đảo dòng thành cột thì....mảng phải vuông chăng?
và với VD của bạn thì:
1 4 7 10
2 5 8 11
3 6 9 12
chứ sao bạn cho VD khi chuyển ...kì vậy!?!?
Bookmarks