pham_hanh :)) Hàng khủng :))
Tổng số bài gửi : 167 Sinh nhật : 10/11/1989
| Tiêu đề: Thuật toán 1.2 C Thu Sep 30, 2010 4:49 am | |
| vẫn chưa hỉu thuật toán lắm - Code:
-
#include<conio.h> #include<stdio.h>
int n; int p[50]; void doicho(int i, int j) { int tg; tg = p[i]; p[i] = p[j]; p[j]= tg; }
void dao(int m) { int i, j; i= 1; j= m; while(i<j) { doicho(i, j); i =++i; j =--j; } } void tdnguoc(int m) { int i; if(m == 1) { for(i=1; i<=n; i++) printf(" %d", p[i]); printf("\n\n"); } else { for(i = 1; i<=m; i++) { tdnguoc(m-1); if(i<m) { doicho(i, m); dao(m-1); } } } } int main() { int i; printf("\nNhap n: "); scanf("%d", &n); for(i =1; i<=n; i++) p[i] = i; tdnguoc(n); getch(); }
bác nào hỉu cái chỗ này giải thích cho em với - Code:
-
else { for(i = 1; i<=m; i++) { tdnguoc(m-1); if(i<m) { doicho(i, m); dao(m-1); } } } | |
|
nguyenhien_hus Quan Chi Huyện
Tổng số bài gửi : 32 Sinh nhật : 16/10/1989
| Tiêu đề: Re: Thuật toán 1.2 C Tue Oct 26, 2010 6:02 pm | |
| | |
|
nguyenhien_hus Quan Chi Huyện
Tổng số bài gửi : 32 Sinh nhật : 16/10/1989
| Tiêu đề: Re: Thuật toán 1.2 C Tue Oct 26, 2010 6:03 pm | |
| [Các bước thực hiện chương trình như sau: Với n=3.
Chương trình chính gọi TDNguoc(3);
Do m=3 khác 1 nên ta sẽ thực hiện vào vòng for với i từ 1 đến 3: i=1 làm 2 việc theo thứ tự: * Thứ nhất: gọi TDN(2) do m=2 khác 1 nên vào vòng for: i’=1 làm 2 việc: Thứ nhất: TDNguoc(1) tức in hv: 1 2 3 Thứ hai: i’=1<2 nên: - đổi chỗ p[1] và p[2] -> 2 1 3 - gọi DAO(1) được 2 1 3 i’=2 làm 2 việc: Thứ nhất: TDNguoc(1) tức in hv: 2 1 3 Thứ hai: i’=2 không <2 thoát vònglặpi’ * Thứ hai: i=1<3 làm 2 việc: Thứ nhất: đổi chỗ p[1]&p[3] -> 3 1 2 Thứ hai: gọi hàm DAO(2) được 1 3 2 i=2 làm 2 việc theo thứ tự: * Thứ nhất: gọi TDN(2) do m=2 khác 1 nên vào vòng for: i’=1 làm 2 việc: Thứ nhất: TDNguoc(1) tức in hv: 1 3 2 Thứ hai: i’=1<2 nên: - đổi chỗ p[1] và p[2] -> 3 1 2 - gọi DAO(1) được 3 1 2 i’=2 làm 2 việc: Thứ nhất: TDNguoc(1) tức in hv: 3 1 2 Thứ hai: i’=2 không <2 thoát vònglặpi’ * Thứ hai: i=2<3 làm 2 việc: Thứ nhất: đổi chỗ p[2]&p[3] -> 3 2 1 Thứ hai: gọi hàm DAO(2) được 2 3 1 i=3 làm 2 việc theo thứ tự sau: * Thứ nhất: gọi TDN(2) do m=2 khác 1 nên vào vòng for: i’=1 làm 2 việc: Thứ nhất: TDNguoc(1) tức in hv: 2 3 1 Thứ hai: i’=1<2 nên: - đổi chỗ p[1] và p[2] -> 3 2 1 - gọi DAO(1) được 3 2 1 i’=2 làm 2 việc: Thứ nhất: TDNguoc(1) tức in hv: 3 2 1 Thứ hai: i’=2 không <2 thoát vònglặpi’ * Thứ hai: i=3 không <3 nên ta thoát khỏi vòng lặp của i và kết thúc chương trình ở màn hình ta đã in ra đủ 6 hoán vị của tập 3 phần tử theo thứ tự từ điển ngược: 1 2 3 2 1 3 1 3 2 3 1 2 2 3 1 3 2 1
] | |
|
nguyenhien_hus Quan Chi Huyện
Tổng số bài gửi : 32 Sinh nhật : 16/10/1989
| Tiêu đề: Re: Thuật toán 1.2 C Tue Oct 26, 2010 6:04 pm | |
| Chúc các bạn tuần sau thi tốt Tổ Hợp | |
|
Sponsored content
| Tiêu đề: Re: Thuật toán 1.2 C | |
| |
|