PDA

View Full Version : In ma trận (Hay)



ndh1ep
06-03-2010, 04:48 PM
Bây giờ đang bận mấy bài VB. Tự nhiên thấy bài này hay quá. Chia sẻ cho mọi người cùng tham khảo.

Đề Bài:
Nhập một số nguyên bất kì. In ra ma trận hình xoắn ốc ngược từ tâm ra ngoài. Nếu là các số có nhiều hơn 1 chữ số thì tách ra để in.
VÍ DỤ:
n= 18
3 1 2 1 1
1 5 4 3 1
4 6 1 2 0
1 7 8 9 1 8
5 1 6 1 7 1

Đầu tiên đối với các số 1 chữ số thì:
5 4 3
6 1 2
7 8 9

Bắt đầu từ số 10 thì
5 4 3
6 1 2 0
7 8 9 1Tối làm xong thì quay ra bài này xem thế nào. Có vẻ khó đấy. Ai có thuật toán post cho tớ tham khảo với nhé !. :MatCuoi:

hoang_fc
06-03-2010, 05:19 PM
Ta chia ma trận in ra thành các vòng
Ví dụ n = 18 có 4 vòng, vòng thứ 4 thì chỉ có 2 phần tử là 1 và 8
Vòng có cạnh là độ dài có số 1 => có 1 phần tử
Vòng có cạnh độ dài 3 2, 3, 4, 5, 6, 7, 8, 9 => có 8 phần tử
Vòng có cạnh dộ dài 5 ...... => có 16 phần tư

... Độ dài của cạnh của mỗi vòng là 2n + 1 với n = 0, 1, 2, ....
Công thức tính số phần tử của vòng thứ có cạnh x là:
2*x + 2 * (x - 2) với x >=3 // Kiểm tra xem đúng ko nhé, tớ chưa check
Bây giơ chỉ việc in ra ma trận, với ô (i,j) trong ma trận kết quả, bạn tính xem nó thuộc vòng thứ mấy, tính xem nó là giá trị nào rồi in ra
Chú ý phải xử lý với vòng cuối cùng số phần tử của nó bị thiếu

Good luck

HTT.itvn
08-03-2010, 12:18 AM
Hình như nhớ là đã làm ở đâu rồi ( dùng 4 lệnh for ) , sắp xếp theo tính giảm dần hay tăng dần theo hình xoắn ốc , có điều khác là các số gồm 2 số thì tách ra , để vài hôm nữa nhé . Mà bài này có lẽ thuộc môn Kỹ thuật lập trình thì phải :D