Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
95,83 KB
Nội dung
Chương 1: ĐỆ QUY 1. Tính giai thừa Function giaithua(n:integer):longint; Begin If n=1 then giaithua:=1 Else Giaithua:=giaithua(n-1)*n; End; 2. Tính Fibonacci Function fibo(n:integer):longint; Begin If (n=1) or (n=2) then fibo:=1 Else fibo:=fibo(n-1)+fibo(n-2); End; 3. Cho n nguyên dương, chuyển số n hệ 10 sang hệ 2 dùng đệ quy Procedure nhiphan(n:integer); Begin If n=1 then write(n) Else Begin Nhiphan(n div 2); Write(n mod 2); End; End; Begin Nhiphan(4); End. 4. Bài toán tháp Hà Nội Procedure chuyendia(n:integer;a,b,c:char); Begin If n=1 then Write(‘chuyen 1 dia tu ‘,a,’sang’,c) Else Begin Chuyendia(n-1,a,c,b); Chuyendia(1,a,b,c); Chuyendia(n-1,b,a,c); End; End; Begin Chuyendia(2,’a’,’b’,’c’); End; 5. Cho n nguyên dương, viết ra số ấy theo thứ tự đảo ngược bằng dùng đệ quy Procedure daonguoc(n:integer); Begin If n<10 then write(n) Else Begin Write(n mod 10); Daonguoc(n div 10); End; Begin Daonguoc(4567); End. 6. Liệt kê các hoán vị của N số tự nhiên Var A:array[1 100] of byte; Cn:array[1 100] of boolean; N,i:byte; Procedure try(i); Begin For j:=1 to n do If cn[j]=true then Begin X[i]:=j; Cn[j]:=false; If i=n then In ket qua Else Try(i+1); Cn[j]:=true; End; End; Begin Write(‘nhap n= ‘); readln(n); For i:=1 to n do Cn[i]:=true; Try(1); Readln; end; 7. Cho 1 số n nguyên dương, liệt kê các số nhị phân có độ dài bằng n Procedure try(i); Begin For j:= 0 to 1 do Begin X[i]:=j; If i=n then In kq Else Try(i+1); End; End; 8. Cho 1 số n nguyên dương, liệt kê các số nhị phân có độ dài bằng n sao cho không có 2 số 1 liền kề nhau Procedure try(i); Begin For j:=0 to 1 do If not(j=1) and(x[i-1]=1))then Begin X[i]:=j; If i= n then In kq Else Try(i+1); End; End; 9. 8 quân hậu Procedure try(i); Begin For j:=1 to 8 do If cot[j] and cc[i-j] and cp[i+j] then Begin X[i]:=j; Cot[j]:=false; Cc[i-j]:=false; Cp[i+j]:=false; If i=8 then In kq Else Try(i+1); Cot[j]:=true; Cc[i-j]:=true; Cp[i+j]:=true; End; End; 10. Cho 5 kí tự A,B,C,D,E và số n nguyên dương, hãy liệt kê các xâu kí tự có độ dài n được thành lập bởi 5 ký tự trên sao cho không có 2 ký tự liên tiếp giống nhau. Procedure try (i); Begin For j:=’a’ to ‘e’ do If x[i-1] <> j then Begin X[i]:=j; If i=n then In kq Else Try(i+1); End; End; 11. Cho 1 ba lô có trọng lượng w và n đồ vật, mỗi đồ vật thứ i có giá trị g[i] và trọng lượng là t[i] (mỗi đồ vật chỉ có 1 vật). Hãy tìm cách bỏ các đồ vật vào trong ba lô sao cho gái trị của ba lô là lớn nhất. Procedure try(i); Begin For j:=0 to 1 do If (tl >= t[i]*J) then Begin X[i]:=j; Giatri:=giatri+g[i]*j; Tl:=tl-t[i]*j If i=n then Begin If giatri>gttu then Begin Luux:=x; Gttu:=giatri; End; End Else Try(i+1); Giatri:=giatri-g[i]*j; Tl:=tl+t[i]*j; End; End; 12. Cho số n nguyên dương, kiệt kê cá cách phân tích số n thành tổng các số tự nhiên bé hơn n. Procedure try(i); Begin For j:=1 to n- 1 do If(tong+j<=n) and (j>=x[i-1]) then Begin X[i]:=j; Tong:=tong+j; If tong=n then Inkq(i) Else If i<n) then try(i+1); Tong:=tong-j; End; End; 13. Cho n ngôi nhà và m màu sơn liệt kê các cách sơn nhà. Procedure try(i); Begin For j:= 1 to m do Begin X[i]:=j; If i=n then In kq Else Try(i+1); End; End; 14. Cho dãy gồm n số nguyên dương, liệt kê tất cả các dãy con có tổng bằng s Procedure try(i); Begin For j:= 1 to n do If(tong+a[j]<=s) and cn[j] then Begin X[i]:=j; Tong:=tong+a[j]; Cn[j]:=false If tong=s then In kq(i) Else if (i<n) then Try(i+1); Tong:=tong-a[j]; Cn[j]:=true; End; End; 15. Cho dãy gồm n số nguyên dương, liệt kê theo thứ tự tất cả các dãy con có tổng bằng s Procedure try(i); Begin For j:= 1 to n do If(tong+a[j]<=s) and (j>x[i-1]) then Begin X[i]:=j; Tong:=tong+a[j]; If tong=s then In kq(i) Else if (i<n) then Try(i+1); Tong:=tong-a[j]; End; End; Chương 2: DANH SÁCH TUYẾN TÍNH 1. Tạo 1 danh sách có n nút( mỗi nút có một số nguyên) Procedure taods(n:integer; var l:tronut); Var p,q:tronut,i:integer; Begin For i:= 1 to n do Begin New(p); Write(‘nhap thong tin cua nut:’); Readln(p^.info); P^.link=nil; If l=nil then L:=p Else Q^.link:=p; Q:=p; End; End; 2. Duyệt danh sách P:=l; While p<>nil do Begin Xử lý nút p dạng trỏ; P:=p^.link; {p^.link là nút sau nó}; End; 2.1 In danh sách Procedure inds(l:tronut); Var p:tronut; Begin P:=l; While p<>nil do Begin Write(p^.info,’ ‘); P:=p^.link; {p^.link là nút sau nó}; End; End; 2.2. Tính tổng các nút Function tongds(l:tronut):integer; Var p:tronut; tong:integer; Begin P:=l; tong:=0 While p<>nil do Begin Tong:=tong+p^.ifno; P:=p^.link; {p^.link là nút sau nó}; End; Tongds:=tong; End; 2.3. Tìm phần tử bé nhất ở trong danh sách Function minds(l:tronut):integer; Var p:tronut; min:integer; Begin P:=l^link; Min:=l^.info; While p<>nil do Begin If p^.info<min then Min:=p^.info; P:=p^.link; End; Minds:=min; End; 2.4. Tìm nút có giá trị X Function timds(l:tronut;x:integer):tronut; Var p:tronut; Begin P:=l; While (p<>nil) and(p^.info<>x) do P:=p^.link; Timds:=p; End; 2.5. Tìm phần tử dương đầu tiên trong danh sách Function timduongdautien(l:tronut):tronut; Var p:tronut; Begin P:=l; While(p<>nil)and(p^.info<0)do P:=p^.link; Timduongdautien:=p; End; 2.6. Tìm phần tử dương bé nhất Function timduongbenhat(l:tronut):integer; Var p:tronut; min:integer; Begin P:=timduongdautien(l); If p=nil then writeln(‘khong cos phan tu dung’) Else Begin Min:=p^.info;p:=p^.link; While(p<>nil) do Begin If (p^.info>0)and (p^.info<min)do Min:=p^.info; P:=p^.link; end; timduongbenhat:=min; end; end; 3. Bổ sung một nút vào cuối danh sách Procedure bosung(var l:tronut;x:integer); Var p,q:tronut; Begin New(p); P^.info:=x; P^.link:=nil; If l=nil then l:=p Else Begin Q:=l; While q^.link<>nil do Q:=q^.link; Q^.link:=p; End; End; 4. Chèn 1 nút vào sau nút trỏ bởi M trong danh sách Procedure chen(var l:tronut;x:integer;m:tronut); Var p:tronut; Begin New(p); P^.info:=x; P^.link:=m^.link; M^.link:=p; End; 5. Xóa nút được trỏ bởi M Procedure xoanut(var l:tronut;m:tronut); Var p:tronut; Begin If l=m then l:=l^.link; Else Begin P:=l; While p^.link<>m do P:=p^.link; P^.link:=m^.link; End; Dispose(m); End; 6. Nối danh sách l2 vào cuối danh sách l1; Procedure noids(var l1:tronut;l2:tronut); Var p:tronut; Begin If l1=nil then l1:=l2; Else Begin P:=l1; While p^.link<>nil do P:=p^.link; P^.link:=l2; End; End; Chương II: NGĂN XẾP VÀ HÀNG ĐỢI I. Ngăn xếp (stack) 1. Bổ sung: Procedure bosung(x); Begin If top=n then write(‘Day stack day’); Else Begin Top:=top+1; Stack[top]:=x; End; End; Procedure bosung(var top:tronut;x:integer); Var p:tronut; Begin New(p); P^.info:=x; P^.link:=top; Top:=p; End; 2. Loại bỏ: Function loaibo; Begin If top=0 then write(‘can stack roi’) Else Begin Top:=top-1; Loaibo:= Stack[top+1]; End; End; Function loaibo(var top:tronut); Var p:tronut;x:integer; Begin X:=top^.info; P:=top; Top:=top^.link; Dispose(p); Loaibo:=x; End; 3. Chuyển hệ 10 sang hệ 2 Procedure chuyen10_2(n:integer); Begin While n<>0 do Begin Bosung(top,n mod 2); N:=n div 2; End; While top <> nil do Write(loaibo(top)); End; II. Hàng đợi (queue) [...]... ĐỒ THỊ 1 Duyệt rộng Procedure duyetrong(u); Begin Bosung queue(u); chuatham[u]:=false; While queueÆ do Begin V:=loaibo queue; Tham v;{xử lý v} For i:= 1 to n do If chuatham[i] and (ke[v,i] =1) then Begin Bosung queue(i); Chuatham[i]:=false; Else; End; End; 2 Duyệt sâu: Procedure duyetsau(u); Begin Bosung stack(u); chuatham[u]:=false; While stackÆ do Begin V:=loaibo stack; Tham v; For i:= 1 to n... Function ktll:boolean; Begin Duyetrong (1) ; I: =1; While(in then ktll:=true Else ktll:=false; End; 5 Đồ thị không liên thông, đếm số thành phần không liên thông Function demtplt:byte; Begin Dem:=0; For i:= 1 to n do If chuatham[i] then Begin Dem:=dem +1; Duyetrong(i); End; Demtplt:=dem; End; 6 Tìm đường đi từ đỉnh này đến đỉnh kia procedure timkiemrong(u); Begin... stack; Tham v; For i:= 1 to n do If chuatham[i] and (ke[v,o] =1) then Begin Bosungstack(i); Chuatham[i]:=false; End; End; End; Procedure duyetsaudq(u); Begin Tham u; Chuatham[u]:=false; For i:= 1 to n do If chuatham[i] and(ke[u,i] =1) then Duyetsaudq(i); End; 3 Kiểm tra 2 đỉnh có liên thông không: Function kiemtra2dinhlt(u,v:integer):boolean; Begin Duyetrong(u); If chuatham[v] then kiemtra2dinhlt:=false Else.. .1 Bổ sung: Procedure bosung(x); Begin If top=n then writeln(‘day’) Else Begin Top:=top +1; Queue[top]:=x; If bottom = 0 then bottom: =1; End; End; Procedure bosung(var top,bottom:tronut;x:integer); Var p:tronut; Begin New(p); P^.info:=x; P^.link:=nil; If topnil then top^.link:=p; Top:=p; If bottom=nil... Bottom:=bottom +1; Loaibo:=queue[bottom -1] ; If bottom>top then bottom:=top:=0; End; End; Function loaibo (var top,bottom:tronut); Begin If bottom=nil then write(‘queue rong’) Else Begin Loaibo:=bottom^.info; P:=bottom; Bottom:=bottom^.link; Dispose(p); If bottom=nil then top:=nil; End; End; Chương 3: CẤU TRÚC CÂY 1 Khai báo cây Type trocay=^cay; Cay=record Info:kiểu; L,r:trocay; End; 2 Duyệt cây theo... End; 2 Duyệt cây theo thứ tự trước Procedure thamgtp(root:trocay) Begin If rootnil then Begin Thăm gốc;{xử lý nút gốc} Thamgtp(root^.L); Thamgtp(root^.r); End; End; 3 Duyệt theo thứ tự giữa (tgp) Procedure thamtgp(root:trocay) Begin If rootnil then Begin Thamtgp(root^.L); Thăm gốc;{xử lý nút gốc} Thamtgp(root^.r); End; End; 4 Thăm theo thứ tự sau (TPG); Procedure thamtpg(root:trocay) Begin If rootnil... Demtplt:=dem; End; 6 Tìm đường đi từ đỉnh này đến đỉnh kia procedure timkiemrong(u); Begin Bosung(u);chuatham[u]:=false; While queueÆ do Begin V:=loaibo; If v=dich then xeit(‘tc’); For i:= 1 to n do If chuatham[i] and (ke[v,i] =1) then Begin Bosung(i);chuatham[i]:=false;truoc[i]:=v; End; End; End; . Chương 1: ĐỆ QUY 1. Tính giai thừa Function giaithua(n:integer):longint; Begin If n =1 then giaithua: =1 Else Giaithua:=giaithua(n -1) *n; End; 2. Tính Fibonacci. 1 liền kề nhau Procedure try(i); Begin For j:=0 to 1 do If not(j =1) and(x[i -1] =1) )then Begin X[i]:=j; If i= n then In kq Else Try(i +1) ; End; End; 9. 8 quân hậu Procedure. 6. Nối danh sách l2 vào cuối danh sách l1; Procedure noids(var l1:tronut;l2:tronut); Var p:tronut; Begin If l1=nil then l1:=l2; Else Begin P:=l1; While p^.link<>nil do P:=p^.link;