kỹ thuật lập trình C chuyên nghiệp phần 10 pps

18 422 2
kỹ thuật lập trình C chuyên nghiệp phần 10 pps

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ii.ii. TìmTìm kiếmkiếmnhịnhị p hân p hân pp intint searchBinary(intsearchBinary(int left,intleft,int right,right, intx){intx){ if ( left<ri g ht ){ if ( left<ri g ht ){ (g){(g){ intint mid=(left+right)/mid=(left+right)/22;; if ( x==A [ i ]) returnif ( x==A [ i ]) return ii ;; ([])([]) ;; if(x<A[i])returnif(x<A[i])return searchBinary(left,midsearchBinary(left,mid 11,x),x);; returnreturn searchBinary(mid + searchBinary(mid + 11 ,right,x),right,x) ;; returnreturn searchBinary(midsearchBinary(mid 11 ,right,x),right,x) ;; }} returnreturn 11 ;; returnreturn 11 ;; }} iiiiii PhânPhân tíchtích mộtmột sốsố nguyênnguyên rara thừathừa sốsố nguyênnguyên tốtố (( BàiBài iii . iii . PhânPhân tíchtích mộtmột sốsố nguyênnguyên rara thừathừa sốsố nguyênnguyên tốtố (( BàiBài tậptập)) Phạm Thế Bảo 2.2. ĐệĐệ quyquy nhánhnhánh LàLà dạngdạng đệđệ quyquy màmà trongtrong quáquá trìnhtrình đệđệ quy,quy, lờilờigọigọi đượcđượcthựcthựchiệnhiện nhiềunhiềulầnlần VíVí dụdụ:: i.i. ThápTháp HàHà nộinội iiii LiệtLiệt kêkê tấttất cảcả hoánhoán vịvị củacủa nn phầnphần tửtử kháckhác nhaunhau ii . ii . LiệtLiệt kêkê tấttất cảcả hoánhoán vịvị củacủa nn phầnphần tửtử kháckhác nhaunhau ThuậtThuậttoántoán:: XétXét tấttấtcảcả cáccác phầnphầntửtử aa ii vớivớii=i=11 nn BỏBỏ hầhầ tửtử khỏikhỏi dãdã ốố BỏBỏ phầ n phầ n tửtử aa ii rara khỏikhỏi dã y dã ys ố s ố GhiGhi nhậnnhận đãđãlấylấyrara phầnphầntửtử aa ii HoánHoán vịvị (Dãy(Dãy số)số) ĐĐ hầhầ tửtử àà l il i dãdã ốố Đ ưa Đ ưa phầ n phầ n tửtử aa ii v à ov à o l ạ il ạ i dã y dã ys ố s ố NếuNếu(Dãy(Dãy số)số)rỗngrỗng thìthì thứthứ tựtự cáccác phầnphầntửtửđượcđượclấylấyrara chínhchính làlà mộtmột hoánhoán vịvị BàiBài toántoán tôtô màmà (floodfill)(floodfill) iii.iii. BàiBài toántoán tôtô mà u mà u (floodfill)(floodfill) Phạm Thế Bảo 3.3. ĐệĐệ quyquy hỗhỗ tươngtương LàLà d ạ n g d ạ n g đ ệ đ ệ q u yq u y màmà tron g tron g đóđóvi ệ cvi ệ c gọ i gọ icócó xoa y xoa y vòn g, vòn g, nh ư nh ư AA ạ gạ g ệệ qyqy gg ệệ gọgọ yy g,g, gọigọiB,B, BBgọigọiC,C, vàvà CCgọigọiAA ĐâyĐây làlà trườngtrường hợphợprấtrấtphứcphức tạptạp VíVí dụdụ:: i.i. ĐườngĐường HilbertHilbert ii.ii. ĐườngĐường SierpinskiSierpinski Phạm Thế Bảo Cá h há khử đệCá h há khử đệ Cá c p h ương p há p khử đệ quy Cá c p h ương p há p khử đệ quy 1.1. VòngVòng lặplặp BằBằ kk 2.2. Bằ ng Bằ ng stac k stac k Phạm Thế Bảo ĐệĐệ Đệ quy Đệ quy  VíVí d ụ d ụ : : Vi ế tVi ế tchươn g chươn g trìnhtrình nh ập nh ập s ố s ố t ự t ự nhiênnhiên n n vàvà tínhtính g iai g iai thừathừa: n!.: n!. ụụ gg ậpập ựự gg  GiảiGiải quyếtquyếtbàibài toántoán bằngbằng vòngvòng lặplặp 1.1. #include <#include <stdio.hstdio.h>> 2.2. unsigned long unsigned long intint factorial(factorial(intint n)n) 3.3. { unsigned long f = 1;{ unsigned long f = 1; 4.4. for (for (intint ii= 1; = 1; ii<=n; <=n; ii++)++) 55 f*=f*= ii ;; 5 . 5 . f *= f *= ii ;; 6.6. return f;return f; 7.7. }} 8.8. intint main(void)main(void) 9.9. { { intint n;n; 10.10. printfprintf ( “ ( “ NhapNhap n: ” );n: ” ); scanfscanf ( “ %d ” ,&n);( “ %d ” ,&n); 10.10. printfprintf (( NhapNhap n: ); n: ); scanfscanf (%d, &n);(%d, &n); printfprintf(“n! = %d! = %l(“n! = %d! = %l \\ n”, n, factorial(n));n”, n, factorial(n)); 11.11. return 0;return 0; 12.12. }} ĐệĐệ Đệ quy Đệ quy  M ộ tM ộ thàmhàm đư ợ cđư ợ c gọ i gọ ilàlà đ ệ đ ệ q u yq u y n ếu n ếu nh ư nh ư tron g tron g q u áq u á trìnhtrình x ử x ử l ý, l ý, hàmhàm nà y nà y cócó m ộ tm ộ tlờilời gọ i gọ i ếế ộộ ợợ gọgọ ệệ qyqy gg qq ý,ý, yy ộộ gọgọ đ ế nđ ế n chínhchính nónó  GiảiGiải quyếtquyếtbàibài toántoán bằngbằng đệđệ quyquy 1.1. #include#include < stdio < stdio h > h > 1.1. #include#include stdiostdio hh 2.2. unsignedunsigned longlong intint factorial(intfactorial(int n)n) 3.3. {{ if(n==if(n==00)) 44 returnreturn 11 ;; 4 . 4 . returnreturn 11 ;; 5.5. returnreturn (n*(n* factorial(nfactorial(n 11))));; 6.6. }} 7.7. intint main(void)main(void) 8.8. {{intint nn;; 9.9. printf( “ Nhapprintf( “ Nhap nn :: ” ) ” ) ;; scanf( “ scanf( “ %% d ” ,d ” , &n)&n) ;; 9.9. printf( Nhapprintf( Nhap nn :: )) ;; scanf(scanf( %% d,d, &n)&n) ;; 10.10. printf(“n!printf(“n! ==%%d!d! ==%%ll\\n”,n”, n,n, factorial(n))factorial(n));; 11.11. returnreturn 00;; 12.12. }} LờiLời gọ i gọ ihàmhàm đ ệ đ ệ q u yq u y vàvà Đi ề uĐi ề uki ệ nki ệ n gọgọ ệệ qyqy ệệ dừngdừng củacủathuậtthuậtgiảigiải đệđệ quyquy BàiBài tátá iảiiải bằbằ th ậtth ật iảiiải đệđệ hảihải óó điềđiề kiệkiệ  BàiBài t o á n t o á ng iải g iải bằ ng bằ ng th u ậtth u ật g iải g iải đệđệ quyquy phảiphải c ó c ó điề u điề u kiệ n kiệ n dừngdừng  ThuậtThuậttoántoán đệđệ quyquy trêntrên máymáy tínhtính cócó thểthể bịbị giớigiớihạnhạnbởibởi dungdung lượnglượng bộbộ nhớnhớ dodo lờilời gọigọi hàmhàm liênliên tiếptiếp dungdung lượnglượng bộbộ nhớnhớ dodo lờilời gọigọi hàmhàm liênliên tiếptiếp mainmain factorial (4)factorial (4) factorial (3)factorial (3) factorial (2)factorial (2) factorial (1)factorial (1) HãyHãy vẽvẽ sơsơ đồđồ tiếntiến trìnhtrình gọigọi hàmhàm khikhi thựcthực hiệnhiện tínhtính dãydãy fibonaccifibonacci bằngbằng HãyHãy vẽvẽ sơsơ đồđồ tiếntiến trìnhtrình gọigọi hàmhàm khikhi thựcthực hiệnhiện tínhtính dãydãy fibonaccifibonacci bằngbằng đệđệ quyquy Bài t á Thá Hà NộiBài t á Thá Hà Nội Bài t o á n Thá p Hà NộiBài t o á n Thá p Hà Nội  CóCó 33 cáicái cộtcột vàvà mộtmột chồngchồng đĩađĩa ởở cộtcột thứthứ nhấtnhất HãyHãy chuyểnchuyển  CóCó 33 cáicái cộtcột vàvà mộtmột chồngchồng đĩađĩa ởở cộtcột thứthứ nhấtnhất HãyHãy chuyểnchuyển chồngchồng đĩađĩasangsang cộtcộtthứthứ baba vớivới điềuđiềukiệnkiệnmỗimỗilầnlầndidi chuyểnchuyển chỉchỉ mộtmột đĩađĩavàvà cáccác đĩađĩabébé luônluôn nằmnằmtrêntrên đĩađĩalớnlớn Th ậtiảiTh ậtiải Th u ật g iảiTh u ật g iải Ch ểCh ể (( 11 )) đĩđĩ ộtột tt ii  Ch uy ể n Ch uy ể n ( n ( n 11 )) đĩ a đĩ asangsang c ột c ột t rung t rung g i ang i an  ChuyểnChuyển đĩađĩalớnlớnnhấtnhấtsangsang cộtcột đíchđích Ch ểCh ể (( 11 )) đĩđĩ từtừ ộtột tt ii ộtột đíhđíh  Ch uy ể n Ch uy ể n ( n ( n 11 )) đĩ a đĩ a từtừ c ột c ột t rung t rung g i ang i an sangsang c ột c ột đí c hđí c h Cài đặtbằ đệCài đặtbằ đệ Cài đặt bằ ng đệ quy Cài đặt bằ ng đệ quy 11 MoveDiskMoveDisk (( disk numberdisk number starting poststarting post target posttarget post 1 . 1 . MoveDiskMoveDisk (( disk _ numberdisk _ number , , starting _ poststarting _ post , , target _ posttarget _ post ,, intermediate_postintermediate_post)) 2.2. {{ 33 if(disk)number > 1)if(disk)number > 1) 3 . 3 . if(disk)number > 1) if(disk)number > 1) 4.4. {{ 5.5. MoveDiskMoveDisk(disk_number(disk_number 1, 1, starting_poststarting_post, , intermediate postintermediate post target posttarget post );); intermediate _ postintermediate _ post , , target _ posttarget _ post );); 6.6. printfprintf(“Move disk number %d, from post %d to post %d.(“Move disk number %d, from post %d to post %d.\\n”, n”, disk_numberdisk_number, , starting_poststarting_post, , target_posttarget_post);); 77 MoveDiskMoveDisk (disk number(disk number 1 intermediate post1 intermediate post 7 . 7 . MoveDiskMoveDisk (disk _ number(disk _ number 1 , intermediate _ post , 1 , intermediate _ post , target_posttarget_post, , starting_poststarting_post);); 8.8. }} 99 elseelse 9 . 9 . elseelse 10.10. printfprintf(“Move disk number 1 from post %d to post %d.(“Move disk number 1 from post %d to post %d.\\n”,n”, starting_poststarting_post, , target_posttarget_post);); 1111 }} 11 . 11 . }} [...]... h c Pháp sang thăm Đông Dương đến một ngôi chùa c ở Hà Nội thấy c c vò sư đang chuyển một chồng đóa qúy gồm 64 đóa với kích thư c kh c nhau từ c t A sang c t C theo c ch: - Mỗi lần chỉ chuyển 1 đóa - Khi chuyển c thể dùng c t trung gian B - Trong suốt qúa trình chuyển c c chồng đóa ở c c cột luôn đư c xếp đúng (đóa c kích thư c bé đư c đặt trên đóa c kích thư c lớn ) Khi đư c hỏi c c vò sư cho... dòng, c t c Tâm 6 Viết chương trình nhập chuỗi ký S: a Đếm và cho biết số lượng khoảng trắng, số lượng ký số, số lượng chữ c i latin, số lượng c c ký tự kh c b Đếm và cho biết số lượng từ c a chuỗi – c c từ c ch nhau bởi khoảng trắng c Biến đổi chuỗi sao cho c c ký tự đầu mỗi từ là ký tự in hoa, c c ký tự kh c in thường 2 Viết chương trình nhập chuỗi ký S, đếm và in cho biết số lượng c a mỗi chữ c i... tất c c c cách xếp n qn hậu trên bàn c n x n sao cho chúng khơng ăn đư c nhau Bàn c c n hàng đư c đánh số từ 0 đến n-1, n c t đư c đánh số từ 0 đến n-1; Bàn c c n*2 -1 đường chéo xi đư c đánh số từ 0 đến 2*n -2, 2 *n -1 đường chéo ngư c đư c đánh số từ 2*n -2 Ví dụ: với bàn c 8 x 8, chúng ta c 8 hàng đư c đánh số từ 0 đến 7, 8 c t đư c đánh số từ 0 đến 7, 15 đường chéo xi, 15 đường chéo ngư c. .. Vậy giải thuật trong trường hợp tổng quát (n > 1) là : THN(n,X,Y,Z) ≡ { THN (n -1,X,Z,Y) ; Move ( X, Z ) ; THN (n -1,Y,X,Z) ; } Với n đóa thì c n bao nhiêu bư c chuyển 1 đóa? Th c chất trong thủ t c THN c c lệnh gọi đệ qui chỉ nhằm sắp sếp trình tự c c thao t c chuyển 1 đóa Số lần chuyển 1 đóa đư c th c hiện là đ c trưng cho độ ph c tạp c a giải thuật Với n đóa , gọi f(n) là số c c thao t c chuyển _một_đóa... Viết chương trình đảo ngư c vị trí c c từ trong c u Ví dụ: “KIEN AN CA” đổi thành “CA AN KIEN” 10 Nhập một c u khơng q 20 từ, mỗi từ khơng q 10 ký tự Viết chương trình tách c c từ trong c u và in c c từ theo thứ tự Alphabet Ví dụ: “PHAN VIEN CONG NGHE THONG TIN” tách thành [PHAN], [VIEN], [CONG], [NGHE], [THONG], [TIN] và in ra: CONG NGHE PHAN THONG TIN VIEN Phần 2: C u tr c Xây dựng c u tr c điểm, đường... e Xuất danh sách sinh viên ra màn hình f Xuất danh sách c c sinh viên c n nợ điểm (điểm < 5) c a ít nhất một mơn h c Phần 3: Con trỏ và tập tin 1 Viết chương trình ghi vào tập tin sochan.dat c c số ngun chẵn từ 0 đến 100 2 Cho mảng c c số ngun, tính tổng c c phần tử c a mảng Dữ liệu vào : tập tin văn bản ARRAY.INP gồm hai dòng - Dòng 1 chứa số ngun n mơ tả số phần tử c a mảng - Dòng 2 chứa n số ngun... c t, đường chéo xi, đường chéo ngư c Vi c kiểm sốt theo hàng ngang là khơng c n thiết vì trên mỗi hàng chỉ xếp đúng một qn hậu Vi c kiểm sốt theo c t đư c ghi nhận nhờ dãy biến logic aj với qui ư c aj=1nếu c t j c n trống, c t aj=0 nếu c t j khơng c n trống Để ghi nhận đường chéo xi và đường chéo ngư c có chiếu tới ơ (i,j) hay khơng, ta sử dụng phương trình i + j = const và i - j = const, đường chéo thứ... tổng c c phần tử trong mảng 3 Viết chương trình sao chép 2 file văn bản 4 Viết chương trình giả lặp lệnh copy con c a dos để tạo file văn bản 5 Cho mảng c c số ngun, hãy liệt kê c c phần tử là số ngun tố Dữ liệu vào : tập tin văn bản NT.INP gồm hai dòng - Dòng 1 chứa số ngun n ( n < = 100 ) - Dòng 2 chứa n số ngun Kết quả : đưa ra tập tin văn bản NT.OUT gồm hai dòng: - Dòng 1 chứa số lượng c c phần. .. kê c c số ngun tố đó 6 Tạo file văn bản c tên là “INPUT.TXT” c c u tr c như sau: - Dòng đầu tiên ghi N (N là số ngun dương nhập từ bàn phím) - Trong c c dòng tiếp theo ghi N số ngun ngẫu nhiên trong phạm vi từ 0 đến 100 , mỗi dòng 10 số (c c số c ch nhau ít nhất một khoảng trắng) Hãy đ c dữ liệu c a file “INPUT.TXT” và lưu vào mảng một chiều A Th c hiện c c cơng vi c sau : • Tìm giá trị lớn nhất c a... đư c đánh số từ 0 15 Vì trên mỗi hàng chỉ xếp đư c đúng một qn hậu, nên chúng ta chỉ c n quan tâm đến qn hậu đư c xếp ở c t nào Từ đó dẫn đến vi c x c định bộ n thành phần x1, x2, , xn,trong đó xi = j đư c hiểu là qn hậu tại dòng i xếp vào c t thứ j Giá trị c a i đư c nhận từ 0 đến n-1; giá trị c a j c ng đư c nhận từ 0 đến n-1, nhưng thoả mãn điều kiện ơ (i,j) chưa bị qn hậu kh c chiếu đến theo c t, . Nội  C C 33 c icái c tcột vàvà mộtmột chồngchồng đĩađĩa ởở c tcột thứthứ nhấtnhất HãyHãy chuyểnchuyển  C C 33 c icái c tcột vàvà mộtmột chồngchồng đĩađĩa ởở c tcột thứthứ nhấtnhất HãyHãy chuyểnchuyển chồngchồng. Khi chuyển c thể dùng c t trung gian B . - Trong suốt qúa trình chuyển c c chồng đóa ở c c cột luôn đư c xếp đúng (đóa c kích thư c bé đư c đặt trên đóa c kích thư c lớn ) . Khi đư c hỏi c c. iiii LiệtLiệt kêkê tấttất c c hoánhoán vịvị c acủa nn phầnphần tửtử kháckh c nhaunhau ii . ii . LiệtLiệt kêkê tấttất c c hoánhoán vịvị c acủa nn phầnphần tửtử kháckh c nhaunhau ThuậtThuậttoántoán:: XétXét tấttấtc c c cc c phầnphầntửtử aa ii vớivớii=i=11

Ngày đăng: 22/07/2014, 16:21

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan