SlideShare uma empresa Scribd logo
1 de 12
Bài tập đệ quy 
Bài 1:(X lũy thừa n) 
#include <iostream> 
#include <math.h> 
using namespace std; 
int x, n; 
long luythua(int n) 
{ 
if(n==0) return 1; 
else return x*luythua(n-1); 
} 
void main() 
{ 
cout<<"Nhap co so"; cin>>x; 
cout<<"Nhap n: "; cin>>n; 
cout<<x<<" luy thua "<<n<<" = "<<luythua(n); 
} 
Bài 2 : S(n) = 1 + 1/3 +1/5 + ... + 1/(2n+1) 
#include <iostream> 
#include <math.h> 
using namespace std; 
float tong(int n) 
{ 
if(n==0) return 1; 
else return (float)1/(2*n+1) + tong(n-1); 
} 
void main() 
{ 
int n; 
cout<<"Nhap n: "; cin>>n; 
cout<<"Ket qua "<<tong(n); 
} 
Bài 3: S(n) = 1 + 1 / 2 + 1/ 3 + ... . .+ 1/n 
#include <iostream> 
#include <math.h> 
using namespace std; 
float tong(int n) 
{ 
if(n==1) return 1; 
else return (float)1/n + tong(n-1); 
} 
void main() 
{ 
int n; 
cout<<"Nhap n: "; cin>>n; 
cout<<"Ket qua "<<tong(n); 
} 
Bài 4: S(n) = 1 + 2[SUP]2 [/SUP]+ 3[SUP]2[/SUP] + 
..... + n[SUP] 2[/SUP] 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
long Tong_Luy_Thua(int n) 
{ 
if(n==1) return 1; 
else return n*n + Tong_Luy_Thua(n-1); 
} 
int main(int argc, char *argv[]) 
{ 
int n;
cout<<"S(n). Nhap N: "; cin>>n; 
cout<<"Ket qua: "<<Tong_Luy_Thua(n); 
system("PAUSE"); 
return EXIT_SUCCESS; 
} 
Bài 5:Tính tổng S(n) = 1 + 2 + 3 + ...... + n 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
long tong(int n) 
{ 
if(n==1) return 1; 
else return n + tong(n-1); 
} 
int main(int argc, char *argv[]) 
{ 
int n; 
cout<<"S(n). Nhap n: "; cin>>n; 
cout<<"Tong tu 1 den n la: "<<tong(n); 
system("PAUSE"); 
} 
Hoặc 
Nhưng điều kiện là N> 0 tức N nguyên dương nên các 
bạn thêm ràng buộc 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
long tong(int n) 
{ 
if(n==1) return 1; 
else return n + tong(n-1); 
} 
int main(int argc, char *argv[]) 
{ 
int n; 
do 
{ 
cout<<"S(n). Nhap n: "; cin>>n; 
}while(n<=0); 
cout<<"Tong tu 1 den n la: "<<tong(n); 
system("PAUSE"); 
} 
Bài 6:In xau nguoc ( vd : abc thành cba ) 
string write(string A,int n) // n là độ dài xâu 
được truyền vào từ hàm main 
{ 
if(n==0) cout<<A[0]; 
else 
{ cout<<A[n]; 
A[n]+write(A,n-1); 
}} 
bài 7: Tìm phần tử max trong mảng 
int timMax(int A[],int n) 
{ 
if(n==1) return A[1]; // tim max bang de quy 
if(n>1) 
{ 
int m=timMax(A,n-1); 
if(A[n-1]>m) return A[n-1]; 
else return m; 
}} 
bài 8: Viết số ngược
void vietSoNguoc(int n) // vd viet 123 thanh 312 
{ 
if(n<=9) cout<<n; 
else 
{ 
cout<<n%10; // 
vietSoNguoc(n/10); // neu 2 dong nay doi 
vi tri cho nhau thi chuyen tu viet so nguoc thanh 
viet so xuoi 
} 
} 
bài 9 : Tìm ước số chung lớn nhất của 2 số nguyên 
int USCLN(int u,int v) // Tim uoc so chung lon nhat 
cua 2 so u ,v bang de quy 
{ 
if(v==0) return u; 
else return USCLN(v,u%v); 
} 
bài 10: Tổng các phần tử trong mảng 
int sum(int A[],int n) // Mang A , n la so phan tu 
{ 
int tong=A[n]; 
if((n==1)&&(n>0)) return A[1]; // mac dinh mang 
chay tu 1-> n 
else 
{ 
return tong+sum(A,n-1); 
} 
} 
bài 11: tính số fibonacci 
int fibonacci(int n ) 
{ 
if(n<=2) return 1; 
else return fibonacci(n-1)+fibonacci(n-2); 
} 
bài 12: Tổ hợp chập k của n phần tử 
Viết chương trình tính tổ hợp chập k của n được 
xác định như sau: 
[Cài đặt:] 
#include <conio.h> 
#include <iostream.h> 
chú thích /*C(n,k)=C(n-1,k-1)+c(n-1,k) dk: 0<k<n; 
c(n,0)=c(n,n)=1*/ 
long int C(int n, int k) 
{ 
if (n==k||k==0) return 1; 
else return C(n-1,k-1)+C(n-1,k); 
} 
/*Chuong trinh chinh*/ 
void main() { 
int n,k; 
cout<<"n = "; cin>>n; 
cout<<"k = "; cin>>k; 
cout<<"C("<<n<<","<<k<<") = "<<C(n,k); 
}
Bài 13: Đệ quy hỗ tương 
Viết chương trình tính n X và n Y được xác định như 
sau: 
[ Cài đặt:] 
#include <conio.h> 
#include <iostream.h> 
long int Y(int n); 
long int X(int n) { 
if(n==0) return 1; 
else return X(n-1) + Y(n-1); 
} 
long int Y(int n) { 
if(n==0) return 1; 
else return 2*X(n-1)*Y(n-1); 
} 
/*Chuong trinh chinh*/ 
void main() { 
int n; 
cout<<"n = "; cin>>n; 
cout<<"X("<<n<<") = "<<X(n); 
cout<<"Y("<<n<<") = "<<Y(n); 
} 
Bài 14: Tích n phần tử trong danh sách 
Viết chương trình tính tích n phần tử 0 1 ,..., n 
a a được định nghĩa đệ quy như sau: 
[Cài đặt:] 
#include <conio.h> 
#include <iostream.h> 
/*Ham tra ve so nguyen tinh tich n phan tu trong 
mang a*/ 
long int S(int a[], int n) { 
if(n==1) return a[0]; 
else return a[n-1]*S(a,n-1); 
} 
/*Chuong trinh chinh*/ 
void main() { 
int *a,n; 
cout<<"n = "; cin>>n; 
a = new int[n]; 
cout<<"Nhap vao "<<n<<" phan tun"; 
for(int i=0; i<n ; i++) 
{ 
cout<<"a["<<i<<"] = "; cin>>a[i]; 
} 
cout<<"Tong "<<n<<" phan tu trong mang A la 
"<<S(a,n); 
} 
Bài 15: Đếm số lần xuất hiện của phần tử x trong 
danh sách 
[Cài đặt:] 
#include <conio.h> 
#include <iostream.h>
/*Ham tra ve so lan xuat hien cua x trong danh sach 
A*/ 
int Find(int a[], int n, int x) { 
if(n==0) return 0; 
else if(a[n-1]==x) return 1+Find(a,n-1,x); 
else return Find(a,n-1,x); 
} 
/*Chuong trinh chinh*/ 
void main() { 
int *a,n,x; 
cout<<"n = "; cin>>n; 
a = new int[n]; 
cout<<"Nhap vao danh sach "<<n<<" phan tun"; 
for(int i=0; i<n ; i++) 
{ 
cout<<"a["<<i<<"] = "; cin>>a[i]; 
} 
cout<<"x = "; cin>>x; 
cout<<"So lan xuat hien cua "<<x<<"trong danh sach 
la "<<Find(a,n,x); 
} 
Bài 16: Tính tổng n phần tử trong danh sách 
Viết chương trình tính tổng n phần tử a0, a1 ,..., 
an. được định nghĩa đệ quy như sau: 
[Cài đặt:] 
#include <conio.h> 
#include <iostream.h> 
/*Ham tra ve so nguyen tinh tong n phan tu trong 
mang a*/ 
long int S(int a[], int n) 
{ 
if(n==1) return a[0]; 
else return a[n-1]+S(a,n-1); 
} 
/*Chuong trinh chinh*/ 
void main() { 
int *a,n; 
cout<<"n = "; cin>>n; 
a = new int[n]; 
cout<<"Nhap vao "<<n<<" phan tun"; 
for(int i=0; i<n ; i++) 
{ 
cout<<"a["<<i<<"] = "; cin>>a[i]; 
} 
cout<<"Tong "<<n<<" phan tu trong mang a la 
"<<S(a,n); 
} 
Bài 17: 3. BT ĐỆ QUY 3: 
#include<iostream.h> 
#include<conio.h> 
#include<math.h> 
//dem so chu so cua so nguyen m 
int DemSo(int n) 
{ 
if(n==0) return 0; 
else return 1+DemSo(n/10);
} 
//dao nguoc 1 so nguyen duong 
void DaoNguoc(int n) 
{ 
if(n>0) 
{ 
cout<<n%10; 
DaoNguoc(n/10); 
} 
} 
//tinh n! 
long GiaiThua(int n) 
{ 
if(n==0) return 1; 
else return n*GiaiThua(n-1); 
} 
//tinh x mu y 
int TinhXMuY(int x,int y) 
{ 
if(y==0) return 1; 
else return x*TinhXMuY(x,y- 
1); 
} 
//tinh tong S=1+2+3+...+n 
int TinhTong(int n) 
{ 
if(n==1) return 1; 
else return TinhTong(n-1)+n; 
} 
//tinh tong S=1+3+5+...+(2k+1) voi (2k+1)<=n 
int TinhTongLe(int n) 
{ 
if(n<=2) return 1; 
else { 
if(n%2!=0) return n+TinhTongLe(n-2); 
else return (n-1)+TinhTongLe(n-3); 
} 
} 
//doi so l tu he 10 sang he k 
void DoiHe(int n,int k) 
{ 
if(n>0) 
{ 
DoiHe(n/k,k); 
if(n%k<10) cout<<n%k; 
else cout<<(char)(n%k+55); 
} 
} 
//tinh 2^n bang phep cong 
long Mu1(int n) 
{ 
if(n==0) return 1; 
else return Mu1(n-1)+Mu1(n-1); 
} 
//tinh 2^2^n bang phep nhan 
long Mu2(int n) 
{ 
if(n==0) return 2; 
else return Mu2(n-1)*Mu2(n-1); 
} 
void main() 
{ 
int m,n,l,k,x,y,i,j,o,a,b; 
cout<<"dem so chu so:"; 
cout<<"nNhap so:"; cin>>m; 
cout<<"nso chu so cua so nguyen "<<m<<" 
la:"<<DemSo(m); 
cout<<"ndao nguoc so:";
cout<<"nnhap so:"; cin>>o; 
DaoNguoc(o); 
cout<<"ntinh giai thua:"; 
cout<<"nNhap so:"; cin>>n; 
cout<<"n"<<n<<"!="<<GiaiThua(n); 
cout<<"ntinh x mu y:"; 
cout<<"nnhap x,y:"; cin>>x>>y; 
cout<<"n"<<x<<" mu 
"<<y<<"="<<TinhXMuY(x,y); 
cout<<"ntinh tong S=1+2+3+...+n:"; 
cout<<"nnhap so:"; cin>>i; 
cout<<"tong cua "<<i<<" so 
="<<TinhTong(i); 
cout<<"ntinh tong le S=1+3+5+...+(2k+1) 
voi (2k+1)<=n:"; 
cout<<"nnhap so:"; cin>>j; 
cout<<"tong le cua "<<j<<" so 
="<<TinhTongLe(j); 
cout<<"ndoi so l tu he 10 sang he k”; 
cout<<"nnhap l,k:"; cin>>l>>k; 
cout<<"ndoi so "<<l<<" he 10 sang he 
"<<k<<" :"; 
DoiHe(l,k); 
cout<<"ntinh 2 mu n:"; 
cout<<"nnhap n:"; cin>>a; 
cout<<"n2^"<<a<<"="<<Mu1(a); 
cout<<"ntinh 2 mu 2 mu n:"; 
cout<<"nnhap n:"; cin>>b; 
cout<<"n2^2^"<<b<<"="<<Mu2(b); 
getch(); 
bài 18 : bài toán dùng đệ quy để tìm max và min 
trong đoạn L ,R trong mảng A[n phần tử ] 
int MAX(int a[],int n,int f,int la) 
{ 
int mid=(f+la)/2,b,c; 
if(f==la) return a[mid]; 
b=MAX(a,n,f,mid-1); 
c=MAX(a,n,mid+1,la); 
b=b>c?b:c; 
return a[mid]>b?a[mid]:b; 
} 
Bài 19: xử lý mảng 2 chiều 
- Nhập vào ma trận số nguyên kích thức n (với 
7>n>4, nhập vào từ bàn phím) 
- In ma trận 
- Tính tổng các phần tử 
- Ðếm số chẵn trong ma trận 
- Tìm max. 
#include<iostream.h> 
#include<conio.h> 
#define Max 7 
#define Min 4 
int a[Max][Max]; 
int n; 
// ham nhap 
void Nhap(){ 
// nhap n 
cout<<"n Nhap kich thuoc ma tran:n"; 
do{ 
cout<<"n n= "; 
cin>>n; 
if(n<Min||n>Max) 
cout<<"n Nhap lai n"; 
}while(n<Min||n>Max);
// nhap ma tran 
cout<<"n Nhap ma tran:n"; 
int i,j; 
for(i=0;i<n;i++) 
for(j=0;j<n;j++) 
{ 
cout<<"n a["<<i<<"]["<<j<<"]="; 
cin>>a[i][j]; 
} 
} 
// In ma tran 
void InMT(){ 
cout<<"n In ma tran: n"; 
for(int i=0;i<n;i++) 
{ 
for(int j=0;j<n;j++) 
cout<<a[i][j]<<"t"; 
cout<<"n"; 
} 
} 
// Tinh tong 
int Tong(){ 
int s=0; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++) 
s=s+a[i][j]; 
return s; 
} 
// Dem so chan 
int DemSoChan(){ 
int dem=0; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++) 
if (a[i][j]%2==0) dem++; 
return dem; 
} 
// Tim max 
int _Max(){ 
int max=a[0][0]; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++) 
if(max<a[i][j]) max=a[i][j]; 
return max; 
} 
// Main 
int main(){ 
Nhap(); 
InMT(); 
cout<<"n Tong= "<<Tong(); 
cout<<"n Dem so chan = "<<DemSoChan(); 
cout<<"n Max= "<<_Max(); 
getch(); 
return 0; 
} 
Bài 20: Viết các hàm thực hiện: 
- Nhập vào 2 ma trận vuông chứa số nguyên A,B có 
kích thước n (7>n>3) 
- Tính ma trận tổng C=A+B, In ma trận C 
- Tính tổng đường chéo chính của ma trận C 
- In ra vị trí các số nguyên tố có trong ma trận C 
- Sắp xếp hàng của ma trận C theo thứ tự tăng dần
- Tính tổng các cột của ma trận C 
- Kiểm tra tính đối xứng của ma trận C. 
// bai 2 de 1. 
#include<iostream.h> 
#include<conio.h> 
#include<math.h> 
int a[5][5],n; 
// Nhap ma tran 
void Nhap(){ 
// nhap so phan tu 
cout<<"n Nhap so phan tu cua day:n"; 
do{ 
cout<<"n n= "; cin>>n; 
if(n<2||n>5) cout<<"n Nhap lai 
n!"; 
} while (n<2||n>5); 
// Nhap ma tran 
cout<<"n Nhap ma tran:n"; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++) 
{ cout<<"n a["<<i<<"]["<<j<<"]="; 
cin>>a[i][j]; } 
} 
// In ma tran 
void InMT(){ 
cout<<"n Ma tran vua nhap:n"; 
for(int i=0;i<n;i++){ 
for(int j=0;j<n;j++) 
cout<<a[i][j]<<"t"; 
cout<<"n"; 
} 
} 
// tim so lon nhat trong ma tran 
void Max(){ 
int max=a[0][0]; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++) 
if ( a[i][j]>max) max=a[i][j]; 
cout<<"n Max= "<<max; 
} 
// tinh tong theo dong 
void TongDong(){ 
int d[5]; // chua gia tri tung dong 
for (int i=0;i<n;i++) d[i]=0; 
for(i=0;i<n;i++) 
for(int j=0;j<n;j++) 
d[i]=d[i]+a[i][j]; 
cout<<"n Tong theo dong:"; 
for (i=0;i<n;i++) 
cout<<"n Dong "<<i<<" : "<<d[i]; 
} 
// tong duong cheo chinh 
int TongCheo(){ 
int ch=0; 
for (int i=0;i<n;i++) ch=ch+a[i][i]; 
return ch; 
} 
// Kiem tra so nguyen to 
int TestNT(int a){
int test=1; 
for(int i=2;i<a;i++) 
if(a%i==0) test=0; 
return test; 
} 
// In ra vi tri so nguyen to 
void InViTriNT(){ 
cout<<"n Vi tri so nguyen to trong ma tran 
la: n"; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++) 
if(TestNT(a[i][j])==1) 
cout<<"["<<i<<"]["<<j<<"]; "; 
} 
// ham chinh 
void main(){ 
clrscr(); 
Nhap(); 
InMT(); 
Max(); 
TongDong(); 
cout<<"n Tong duong cheo chinh: 
"<<TongCheo(); 
InViTriNT(); 
getch(); 
} 
Bài 21: /* Ví dụ sử dùng FILE trong CC++ 
Viết chương trình: 
- Nhập vào 2 số nguyên a, b 
- Ghi 2 số nguyên a,b vào file bai1.txt 
- Đọc dữ liệu từ file bai1.txt, tính tổng, hiệu, 
tích, thương 
- Ghi kết quả vào file bai1.txt 
- Đọc dữ liệu từ file bai1.txt, in kết quả ra màn 
hình. 
#include<stdio.h> 
#include<conio.h> 
int a,b, tong, hieu, tich, thuong; 
FILE *f; 
// Nhap 2 so nguyen a,b 
void Nhap(){ 
printf("n Nhap 2 so a,b: "); 
printf("n a= "); 
scanf("%d",&a); 
printf("n b= "); 
scanf("%d",&b); 
} 
// ghi a,b vao file bai1.txt 
void GhiDuLieu(){ 
// mo file de ghi 
f=fopen("E:bai1.txt","w"); 
// ghi a, b vao file 
fwrite(&a,sizeof(a),1,f); 
fwrite(&b,sizeof(b),1,f); 
// dong file 
fclose(f); 
} 
// Doc du lieu tu file bai1.txt 
void DocDuLieu(){
// mo file de doc 
f=fopen("E:bai1.txt","r"); 
// Doc du lieu tu file bai1.txt 
int x,y;// chua du lieu doc ra 
fread(&x,sizeof(x),1,f); 
fread(&y,sizeof(y),1,f); 
// tinh tong, hieu, tich, thuong 
tong=x+y; 
hieu=x-y; 
tich=x*y; 
thuong=x/y; 
// dong file 
fclose(f); 
} 
// ghi ket qua vao file 
void GhiKQ(){ 
// mo file de ghi them 
f=fopen("E:bai1.txt","a"); 
// di chuyen ve cuoi file 
fseek(f,0,SEEK_END); 
// ghi them tong, hieu,tich,thuong vao file 
fwrite(&tong,sizeof(tong),1,f); 
fwrite(&hieu,sizeof(hieu),1,f); 
fwrite(&tich,sizeof(tich),1,f); 
fwrite(&thuong,sizeof(thuong),1,f); 
// 
fclose(f); 
} 
// Doc ket qua tu file baiq.txt 
void DocKQ(){ 
// mo file de doc 
f=fopen("E:bai1.txt","r"); 
// dua con tro ve dua file 
rewind(f); 
printf("n KET QUA DOC TU FILE bai1.txt "); 
int t;// chua ket qua 
fread(&t,sizeof(t),1,f); printf("n a= %d",t); 
fread(&t,sizeof(t),1,f); printf("n b= %d",t); 
fread(&t,sizeof(t),1,f); printf("n tong= %d",t); 
fread(&t,sizeof(t),1,f); printf("n hieu= %d",t); 
fread(&t,sizeof(t),1,f); printf("n tich= %d",t); 
fread(&t,sizeof(t),1,f); printf("n thuong= 
%d",t); 
fclose(f); 
} 
// ham main 
int main(){ 
Nhap(); 
GhiDuLieu(); 
DocDuLieu(); // doc và tinh 
GhiKQ(); // ghi them vao file 
DocKQ(); 
getch(); 
return 0; 
} 
Bài 22: Tìm UCLN và BCNN 
Code: 
unsigned int UCLN(unsigned int a,unsigned int b) { 
return (b==0)?a:UCLN(b, a%b); 
} 
unsigned int BCNN(unsigned int a,unsigned int b){ 
return (a*b/UCLN(a,b)); 
}
3 đoạn code tìm số Fibo (cách khử đệ quy bình 
thường thì khỏi nói) 
Code: 
double Fibo1(long n){ //De quy -------- O(2^n) 
return (n==1 || n==2)?1:(Fibo1(n-1)+Fibo1(n- 
2)); 
} 
double Fibo3(long n){ //Dung cong thuc ------ O(1) 
return ( (1/sqrt(5))*(powl(((1+sqrt(5))/2),n) - 
powl(((1-sqrt(5))/2),n)) ); 
} 
double fibo[1000000]; 
double makefibo(long n){ //Quy hoach dong (De quy 
dung mang luu tru) ------ O(n) 
return (n==1)?1:(fibo[n]=makefibo(n-1) + 
fibo[n-2]); 
} 
Cũng kiểm tra số nguyên tố nhưng .. 1 dòng - bù lại 
thì do dùng đệ quy nên chưa tối ưu 
Code: 
int ngto2(int i, int n){//Test: ngto2(i/2,i) 
return (n==0 || n==1)?0:((n==2 || 
n==3)?1:((i==2)?(n%i):((!(n%i))?0:ngto2(i-1,n)))); 
} 
Đảo ngược số trực tiếp mà không dùng mảng. 1234 -> 
4321 
Code: 
int daoso(int n, int &x){//Ket qua luu vao x. 
n=1234 -> x=4321 
if (n<10) return x=x*10+n; 
x= x*10 + (n%10); 
return daoso(n/10,x); 
}

Mais conteúdo relacionado

Mais procurados

Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)
lieu_lamlam
 
Bai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xepBai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xep
tran0phu
 
Công thức vật lý lớp 11
Công thức vật lý lớp 11Công thức vật lý lớp 11
Công thức vật lý lớp 11
Vô Ngã
 
Lập trình c++ có lời giải 2
Lập trình c++ có lời giải 2Lập trình c++ có lời giải 2
Lập trình c++ có lời giải 2
Minh Ngoc Tran
 
Các giao thức sử dụng trong các lớp của mô hình osi
Các giao thức sử dụng trong các lớp của mô hình osiCác giao thức sử dụng trong các lớp của mô hình osi
Các giao thức sử dụng trong các lớp của mô hình osi
UDCNTT
 
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhTính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Chien Dang
 
Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tính
Thế Giới Tinh Hoa
 

Mais procurados (20)

Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)
 
30 bài toán phương pháp tính
30 bài toán phương pháp tính30 bài toán phương pháp tính
30 bài toán phương pháp tính
 
Chuong5
Chuong5Chuong5
Chuong5
 
Bai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xepBai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xep
 
Công thức vật lý lớp 11
Công thức vật lý lớp 11Công thức vật lý lớp 11
Công thức vật lý lớp 11
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logic
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#
 
Hệ Phương Trình Bậc Nhất Hai Ẩn
Hệ Phương Trình Bậc Nhất Hai ẨnHệ Phương Trình Bậc Nhất Hai Ẩn
Hệ Phương Trình Bậc Nhất Hai Ẩn
 
Lập trình c++ có lời giải 2
Lập trình c++ có lời giải 2Lập trình c++ có lời giải 2
Lập trình c++ có lời giải 2
 
Chia subnetmask
Chia subnetmaskChia subnetmask
Chia subnetmask
 
Công thức tính nhanh điện xoay chiều
Công thức tính nhanh điện xoay chiềuCông thức tính nhanh điện xoay chiều
Công thức tính nhanh điện xoay chiều
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Tổng Hợp Công Thức Vật Lí Lớp 12
Tổng Hợp Công Thức Vật Lí Lớp 12Tổng Hợp Công Thức Vật Lí Lớp 12
Tổng Hợp Công Thức Vật Lí Lớp 12
 
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTBài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
 
Các giao thức sử dụng trong các lớp của mô hình osi
Các giao thức sử dụng trong các lớp của mô hình osiCác giao thức sử dụng trong các lớp của mô hình osi
Các giao thức sử dụng trong các lớp của mô hình osi
 
Pvh bai-tap-a2-2014-th-11(1)
Pvh bai-tap-a2-2014-th-11(1)Pvh bai-tap-a2-2014-th-11(1)
Pvh bai-tap-a2-2014-th-11(1)
 
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhTính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
 
Mạch RLC có omega biến thiên
Mạch RLC có omega biến thiênMạch RLC có omega biến thiên
Mạch RLC có omega biến thiên
 
Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tính
 
Bài toán liên quan về Phân số tối giản trong Toán lớp 6
Bài toán liên quan về Phân số tối giản trong Toán lớp 6Bài toán liên quan về Phân số tối giản trong Toán lớp 6
Bài toán liên quan về Phân số tối giản trong Toán lớp 6
 

Destaque (13)

Chuong 05 de quy
Chuong 05 de quyChuong 05 de quy
Chuong 05 de quy
 
Cach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duocCach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duoc
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hoc
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trình
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Cac bai toan ve quy hoach dong
Cac bai toan ve quy hoach dongCac bai toan ve quy hoach dong
Cac bai toan ve quy hoach dong
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Nhận thức rủi ro tác động đến ý định mua sắm trực tuyến của khách hàng38 201...
Nhận thức rủi ro tác động đến ý định  mua sắm trực tuyến của khách hàng38 201...Nhận thức rủi ro tác động đến ý định  mua sắm trực tuyến của khách hàng38 201...
Nhận thức rủi ro tác động đến ý định mua sắm trực tuyến của khách hàng38 201...
 
98533162 tim-hiểu-tổng-quan-wcdma
98533162 tim-hiểu-tổng-quan-wcdma98533162 tim-hiểu-tổng-quan-wcdma
98533162 tim-hiểu-tổng-quan-wcdma
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch động
 

Semelhante a Bai de quy

Sang tao4
Sang tao4Sang tao4
Sang tao4
hieusui
 
Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1
Minh Ngoc Tran
 
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
Hồ Lợi
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3
Minh Ngoc Tran
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1
Bễ Nguyễn
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
xcode_esvn
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
giang
 

Semelhante a Bai de quy (20)

Tut5 solution
Tut5 solutionTut5 solution
Tut5 solution
 
Data Structures and Algorithms Gụidance
Data Structures and Algorithms GụidanceData Structures and Algorithms Gụidance
Data Structures and Algorithms Gụidance
 
Sang tao4
Sang tao4Sang tao4
Sang tao4
 
Bài tập CTDL và GT 8
Bài tập CTDL và GT 8Bài tập CTDL và GT 8
Bài tập CTDL và GT 8
 
Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1
 
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
 
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3
 
Exercise array
Exercise arrayExercise array
Exercise array
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
Lesson08
Lesson08Lesson08
Lesson08
 
Bai tap oop c++
Bai tap oop c++Bai tap oop c++
Bai tap oop c++
 
Lesson08
Lesson08Lesson08
Lesson08
 
Chuyen doi he so
Chuyen doi he soChuyen doi he so
Chuyen doi he so
 
Bai tap java
Bai tap javaBai tap java
Bai tap java
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
 
Lập trình hướng đối tượng - p3
Lập trình hướng đối tượng - p3Lập trình hướng đối tượng - p3
Lập trình hướng đối tượng - p3
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 

Mais de Trần Văn Nam

Phan 2 chuong 8 (chuoi ky tu)
Phan 2   chuong 8 (chuoi ky tu)Phan 2   chuong 8 (chuoi ky tu)
Phan 2 chuong 8 (chuoi ky tu)
Trần Văn Nam
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
Trần Văn Nam
 
Phan 2 chuong 10 (tap tin)
Phan 2   chuong 10 (tap tin)Phan 2   chuong 10 (tap tin)
Phan 2 chuong 10 (tap tin)
Trần Văn Nam
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
Trần Văn Nam
 
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trìnhGiáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Trần Văn Nam
 
Bg chuong trinh dich chuong 3
Bg chuong trinh dich chuong 3Bg chuong trinh dich chuong 3
Bg chuong trinh dich chuong 3
Trần Văn Nam
 
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
Trần Văn Nam
 

Mais de Trần Văn Nam (20)

Tut6
Tut6Tut6
Tut6
 
Pointer
PointerPointer
Pointer
 
Stl string
Stl stringStl string
Stl string
 
Phan 2 chuong 8 (chuoi ky tu)
Phan 2   chuong 8 (chuoi ky tu)Phan 2   chuong 8 (chuoi ky tu)
Phan 2 chuong 8 (chuoi ky tu)
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
 
Phan 2 chuong 10 (tap tin)
Phan 2   chuong 10 (tap tin)Phan 2   chuong 10 (tap tin)
Phan 2 chuong 10 (tap tin)
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
Lab4
Lab4Lab4
Lab4
 
Lect05 array
Lect05 arrayLect05 array
Lect05 array
 
Huong dan thao_tac_file
Huong dan thao_tac_fileHuong dan thao_tac_file
Huong dan thao_tac_file
 
Cam bien gia toc
Cam bien gia tocCam bien gia toc
Cam bien gia toc
 
Bai tap c
Bai tap cBai tap c
Bai tap c
 
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trìnhGiáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 
Chuong 05
Chuong 05Chuong 05
Chuong 05
 
Bg chuong trinh dich chuong 3
Bg chuong trinh dich chuong 3Bg chuong trinh dich chuong 3
Bg chuong trinh dich chuong 3
 
Chapter07 io
Chapter07 ioChapter07 io
Chapter07 io
 
C++ 2011 april_draft
C++ 2011 april_draftC++ 2011 april_draft
C++ 2011 april_draft
 
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...Bài giảng ngôn ngữ lập trình c++ chương 7  ra vào dữ liệu   tài liệu, ebook, ...
Bài giảng ngôn ngữ lập trình c++ chương 7 ra vào dữ liệu tài liệu, ebook, ...
 

Bai de quy

  • 1. Bài tập đệ quy Bài 1:(X lũy thừa n) #include <iostream> #include <math.h> using namespace std; int x, n; long luythua(int n) { if(n==0) return 1; else return x*luythua(n-1); } void main() { cout<<"Nhap co so"; cin>>x; cout<<"Nhap n: "; cin>>n; cout<<x<<" luy thua "<<n<<" = "<<luythua(n); } Bài 2 : S(n) = 1 + 1/3 +1/5 + ... + 1/(2n+1) #include <iostream> #include <math.h> using namespace std; float tong(int n) { if(n==0) return 1; else return (float)1/(2*n+1) + tong(n-1); } void main() { int n; cout<<"Nhap n: "; cin>>n; cout<<"Ket qua "<<tong(n); } Bài 3: S(n) = 1 + 1 / 2 + 1/ 3 + ... . .+ 1/n #include <iostream> #include <math.h> using namespace std; float tong(int n) { if(n==1) return 1; else return (float)1/n + tong(n-1); } void main() { int n; cout<<"Nhap n: "; cin>>n; cout<<"Ket qua "<<tong(n); } Bài 4: S(n) = 1 + 2[SUP]2 [/SUP]+ 3[SUP]2[/SUP] + ..... + n[SUP] 2[/SUP] #include <cstdlib> #include <iostream> using namespace std; long Tong_Luy_Thua(int n) { if(n==1) return 1; else return n*n + Tong_Luy_Thua(n-1); } int main(int argc, char *argv[]) { int n;
  • 2. cout<<"S(n). Nhap N: "; cin>>n; cout<<"Ket qua: "<<Tong_Luy_Thua(n); system("PAUSE"); return EXIT_SUCCESS; } Bài 5:Tính tổng S(n) = 1 + 2 + 3 + ...... + n #include <cstdlib> #include <iostream> using namespace std; long tong(int n) { if(n==1) return 1; else return n + tong(n-1); } int main(int argc, char *argv[]) { int n; cout<<"S(n). Nhap n: "; cin>>n; cout<<"Tong tu 1 den n la: "<<tong(n); system("PAUSE"); } Hoặc Nhưng điều kiện là N> 0 tức N nguyên dương nên các bạn thêm ràng buộc #include <cstdlib> #include <iostream> using namespace std; long tong(int n) { if(n==1) return 1; else return n + tong(n-1); } int main(int argc, char *argv[]) { int n; do { cout<<"S(n). Nhap n: "; cin>>n; }while(n<=0); cout<<"Tong tu 1 den n la: "<<tong(n); system("PAUSE"); } Bài 6:In xau nguoc ( vd : abc thành cba ) string write(string A,int n) // n là độ dài xâu được truyền vào từ hàm main { if(n==0) cout<<A[0]; else { cout<<A[n]; A[n]+write(A,n-1); }} bài 7: Tìm phần tử max trong mảng int timMax(int A[],int n) { if(n==1) return A[1]; // tim max bang de quy if(n>1) { int m=timMax(A,n-1); if(A[n-1]>m) return A[n-1]; else return m; }} bài 8: Viết số ngược
  • 3. void vietSoNguoc(int n) // vd viet 123 thanh 312 { if(n<=9) cout<<n; else { cout<<n%10; // vietSoNguoc(n/10); // neu 2 dong nay doi vi tri cho nhau thi chuyen tu viet so nguoc thanh viet so xuoi } } bài 9 : Tìm ước số chung lớn nhất của 2 số nguyên int USCLN(int u,int v) // Tim uoc so chung lon nhat cua 2 so u ,v bang de quy { if(v==0) return u; else return USCLN(v,u%v); } bài 10: Tổng các phần tử trong mảng int sum(int A[],int n) // Mang A , n la so phan tu { int tong=A[n]; if((n==1)&&(n>0)) return A[1]; // mac dinh mang chay tu 1-> n else { return tong+sum(A,n-1); } } bài 11: tính số fibonacci int fibonacci(int n ) { if(n<=2) return 1; else return fibonacci(n-1)+fibonacci(n-2); } bài 12: Tổ hợp chập k của n phần tử Viết chương trình tính tổ hợp chập k của n được xác định như sau: [Cài đặt:] #include <conio.h> #include <iostream.h> chú thích /*C(n,k)=C(n-1,k-1)+c(n-1,k) dk: 0<k<n; c(n,0)=c(n,n)=1*/ long int C(int n, int k) { if (n==k||k==0) return 1; else return C(n-1,k-1)+C(n-1,k); } /*Chuong trinh chinh*/ void main() { int n,k; cout<<"n = "; cin>>n; cout<<"k = "; cin>>k; cout<<"C("<<n<<","<<k<<") = "<<C(n,k); }
  • 4. Bài 13: Đệ quy hỗ tương Viết chương trình tính n X và n Y được xác định như sau: [ Cài đặt:] #include <conio.h> #include <iostream.h> long int Y(int n); long int X(int n) { if(n==0) return 1; else return X(n-1) + Y(n-1); } long int Y(int n) { if(n==0) return 1; else return 2*X(n-1)*Y(n-1); } /*Chuong trinh chinh*/ void main() { int n; cout<<"n = "; cin>>n; cout<<"X("<<n<<") = "<<X(n); cout<<"Y("<<n<<") = "<<Y(n); } Bài 14: Tích n phần tử trong danh sách Viết chương trình tính tích n phần tử 0 1 ,..., n a a được định nghĩa đệ quy như sau: [Cài đặt:] #include <conio.h> #include <iostream.h> /*Ham tra ve so nguyen tinh tich n phan tu trong mang a*/ long int S(int a[], int n) { if(n==1) return a[0]; else return a[n-1]*S(a,n-1); } /*Chuong trinh chinh*/ void main() { int *a,n; cout<<"n = "; cin>>n; a = new int[n]; cout<<"Nhap vao "<<n<<" phan tun"; for(int i=0; i<n ; i++) { cout<<"a["<<i<<"] = "; cin>>a[i]; } cout<<"Tong "<<n<<" phan tu trong mang A la "<<S(a,n); } Bài 15: Đếm số lần xuất hiện của phần tử x trong danh sách [Cài đặt:] #include <conio.h> #include <iostream.h>
  • 5. /*Ham tra ve so lan xuat hien cua x trong danh sach A*/ int Find(int a[], int n, int x) { if(n==0) return 0; else if(a[n-1]==x) return 1+Find(a,n-1,x); else return Find(a,n-1,x); } /*Chuong trinh chinh*/ void main() { int *a,n,x; cout<<"n = "; cin>>n; a = new int[n]; cout<<"Nhap vao danh sach "<<n<<" phan tun"; for(int i=0; i<n ; i++) { cout<<"a["<<i<<"] = "; cin>>a[i]; } cout<<"x = "; cin>>x; cout<<"So lan xuat hien cua "<<x<<"trong danh sach la "<<Find(a,n,x); } Bài 16: Tính tổng n phần tử trong danh sách Viết chương trình tính tổng n phần tử a0, a1 ,..., an. được định nghĩa đệ quy như sau: [Cài đặt:] #include <conio.h> #include <iostream.h> /*Ham tra ve so nguyen tinh tong n phan tu trong mang a*/ long int S(int a[], int n) { if(n==1) return a[0]; else return a[n-1]+S(a,n-1); } /*Chuong trinh chinh*/ void main() { int *a,n; cout<<"n = "; cin>>n; a = new int[n]; cout<<"Nhap vao "<<n<<" phan tun"; for(int i=0; i<n ; i++) { cout<<"a["<<i<<"] = "; cin>>a[i]; } cout<<"Tong "<<n<<" phan tu trong mang a la "<<S(a,n); } Bài 17: 3. BT ĐỆ QUY 3: #include<iostream.h> #include<conio.h> #include<math.h> //dem so chu so cua so nguyen m int DemSo(int n) { if(n==0) return 0; else return 1+DemSo(n/10);
  • 6. } //dao nguoc 1 so nguyen duong void DaoNguoc(int n) { if(n>0) { cout<<n%10; DaoNguoc(n/10); } } //tinh n! long GiaiThua(int n) { if(n==0) return 1; else return n*GiaiThua(n-1); } //tinh x mu y int TinhXMuY(int x,int y) { if(y==0) return 1; else return x*TinhXMuY(x,y- 1); } //tinh tong S=1+2+3+...+n int TinhTong(int n) { if(n==1) return 1; else return TinhTong(n-1)+n; } //tinh tong S=1+3+5+...+(2k+1) voi (2k+1)<=n int TinhTongLe(int n) { if(n<=2) return 1; else { if(n%2!=0) return n+TinhTongLe(n-2); else return (n-1)+TinhTongLe(n-3); } } //doi so l tu he 10 sang he k void DoiHe(int n,int k) { if(n>0) { DoiHe(n/k,k); if(n%k<10) cout<<n%k; else cout<<(char)(n%k+55); } } //tinh 2^n bang phep cong long Mu1(int n) { if(n==0) return 1; else return Mu1(n-1)+Mu1(n-1); } //tinh 2^2^n bang phep nhan long Mu2(int n) { if(n==0) return 2; else return Mu2(n-1)*Mu2(n-1); } void main() { int m,n,l,k,x,y,i,j,o,a,b; cout<<"dem so chu so:"; cout<<"nNhap so:"; cin>>m; cout<<"nso chu so cua so nguyen "<<m<<" la:"<<DemSo(m); cout<<"ndao nguoc so:";
  • 7. cout<<"nnhap so:"; cin>>o; DaoNguoc(o); cout<<"ntinh giai thua:"; cout<<"nNhap so:"; cin>>n; cout<<"n"<<n<<"!="<<GiaiThua(n); cout<<"ntinh x mu y:"; cout<<"nnhap x,y:"; cin>>x>>y; cout<<"n"<<x<<" mu "<<y<<"="<<TinhXMuY(x,y); cout<<"ntinh tong S=1+2+3+...+n:"; cout<<"nnhap so:"; cin>>i; cout<<"tong cua "<<i<<" so ="<<TinhTong(i); cout<<"ntinh tong le S=1+3+5+...+(2k+1) voi (2k+1)<=n:"; cout<<"nnhap so:"; cin>>j; cout<<"tong le cua "<<j<<" so ="<<TinhTongLe(j); cout<<"ndoi so l tu he 10 sang he k”; cout<<"nnhap l,k:"; cin>>l>>k; cout<<"ndoi so "<<l<<" he 10 sang he "<<k<<" :"; DoiHe(l,k); cout<<"ntinh 2 mu n:"; cout<<"nnhap n:"; cin>>a; cout<<"n2^"<<a<<"="<<Mu1(a); cout<<"ntinh 2 mu 2 mu n:"; cout<<"nnhap n:"; cin>>b; cout<<"n2^2^"<<b<<"="<<Mu2(b); getch(); bài 18 : bài toán dùng đệ quy để tìm max và min trong đoạn L ,R trong mảng A[n phần tử ] int MAX(int a[],int n,int f,int la) { int mid=(f+la)/2,b,c; if(f==la) return a[mid]; b=MAX(a,n,f,mid-1); c=MAX(a,n,mid+1,la); b=b>c?b:c; return a[mid]>b?a[mid]:b; } Bài 19: xử lý mảng 2 chiều - Nhập vào ma trận số nguyên kích thức n (với 7>n>4, nhập vào từ bàn phím) - In ma trận - Tính tổng các phần tử - Ðếm số chẵn trong ma trận - Tìm max. #include<iostream.h> #include<conio.h> #define Max 7 #define Min 4 int a[Max][Max]; int n; // ham nhap void Nhap(){ // nhap n cout<<"n Nhap kich thuoc ma tran:n"; do{ cout<<"n n= "; cin>>n; if(n<Min||n>Max) cout<<"n Nhap lai n"; }while(n<Min||n>Max);
  • 8. // nhap ma tran cout<<"n Nhap ma tran:n"; int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) { cout<<"n a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } } // In ma tran void InMT(){ cout<<"n In ma tran: n"; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<a[i][j]<<"t"; cout<<"n"; } } // Tinh tong int Tong(){ int s=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) s=s+a[i][j]; return s; } // Dem so chan int DemSoChan(){ int dem=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if (a[i][j]%2==0) dem++; return dem; } // Tim max int _Max(){ int max=a[0][0]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(max<a[i][j]) max=a[i][j]; return max; } // Main int main(){ Nhap(); InMT(); cout<<"n Tong= "<<Tong(); cout<<"n Dem so chan = "<<DemSoChan(); cout<<"n Max= "<<_Max(); getch(); return 0; } Bài 20: Viết các hàm thực hiện: - Nhập vào 2 ma trận vuông chứa số nguyên A,B có kích thước n (7>n>3) - Tính ma trận tổng C=A+B, In ma trận C - Tính tổng đường chéo chính của ma trận C - In ra vị trí các số nguyên tố có trong ma trận C - Sắp xếp hàng của ma trận C theo thứ tự tăng dần
  • 9. - Tính tổng các cột của ma trận C - Kiểm tra tính đối xứng của ma trận C. // bai 2 de 1. #include<iostream.h> #include<conio.h> #include<math.h> int a[5][5],n; // Nhap ma tran void Nhap(){ // nhap so phan tu cout<<"n Nhap so phan tu cua day:n"; do{ cout<<"n n= "; cin>>n; if(n<2||n>5) cout<<"n Nhap lai n!"; } while (n<2||n>5); // Nhap ma tran cout<<"n Nhap ma tran:n"; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cout<<"n a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } } // In ma tran void InMT(){ cout<<"n Ma tran vua nhap:n"; for(int i=0;i<n;i++){ for(int j=0;j<n;j++) cout<<a[i][j]<<"t"; cout<<"n"; } } // tim so lon nhat trong ma tran void Max(){ int max=a[0][0]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if ( a[i][j]>max) max=a[i][j]; cout<<"n Max= "<<max; } // tinh tong theo dong void TongDong(){ int d[5]; // chua gia tri tung dong for (int i=0;i<n;i++) d[i]=0; for(i=0;i<n;i++) for(int j=0;j<n;j++) d[i]=d[i]+a[i][j]; cout<<"n Tong theo dong:"; for (i=0;i<n;i++) cout<<"n Dong "<<i<<" : "<<d[i]; } // tong duong cheo chinh int TongCheo(){ int ch=0; for (int i=0;i<n;i++) ch=ch+a[i][i]; return ch; } // Kiem tra so nguyen to int TestNT(int a){
  • 10. int test=1; for(int i=2;i<a;i++) if(a%i==0) test=0; return test; } // In ra vi tri so nguyen to void InViTriNT(){ cout<<"n Vi tri so nguyen to trong ma tran la: n"; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(TestNT(a[i][j])==1) cout<<"["<<i<<"]["<<j<<"]; "; } // ham chinh void main(){ clrscr(); Nhap(); InMT(); Max(); TongDong(); cout<<"n Tong duong cheo chinh: "<<TongCheo(); InViTriNT(); getch(); } Bài 21: /* Ví dụ sử dùng FILE trong CC++ Viết chương trình: - Nhập vào 2 số nguyên a, b - Ghi 2 số nguyên a,b vào file bai1.txt - Đọc dữ liệu từ file bai1.txt, tính tổng, hiệu, tích, thương - Ghi kết quả vào file bai1.txt - Đọc dữ liệu từ file bai1.txt, in kết quả ra màn hình. #include<stdio.h> #include<conio.h> int a,b, tong, hieu, tich, thuong; FILE *f; // Nhap 2 so nguyen a,b void Nhap(){ printf("n Nhap 2 so a,b: "); printf("n a= "); scanf("%d",&a); printf("n b= "); scanf("%d",&b); } // ghi a,b vao file bai1.txt void GhiDuLieu(){ // mo file de ghi f=fopen("E:bai1.txt","w"); // ghi a, b vao file fwrite(&a,sizeof(a),1,f); fwrite(&b,sizeof(b),1,f); // dong file fclose(f); } // Doc du lieu tu file bai1.txt void DocDuLieu(){
  • 11. // mo file de doc f=fopen("E:bai1.txt","r"); // Doc du lieu tu file bai1.txt int x,y;// chua du lieu doc ra fread(&x,sizeof(x),1,f); fread(&y,sizeof(y),1,f); // tinh tong, hieu, tich, thuong tong=x+y; hieu=x-y; tich=x*y; thuong=x/y; // dong file fclose(f); } // ghi ket qua vao file void GhiKQ(){ // mo file de ghi them f=fopen("E:bai1.txt","a"); // di chuyen ve cuoi file fseek(f,0,SEEK_END); // ghi them tong, hieu,tich,thuong vao file fwrite(&tong,sizeof(tong),1,f); fwrite(&hieu,sizeof(hieu),1,f); fwrite(&tich,sizeof(tich),1,f); fwrite(&thuong,sizeof(thuong),1,f); // fclose(f); } // Doc ket qua tu file baiq.txt void DocKQ(){ // mo file de doc f=fopen("E:bai1.txt","r"); // dua con tro ve dua file rewind(f); printf("n KET QUA DOC TU FILE bai1.txt "); int t;// chua ket qua fread(&t,sizeof(t),1,f); printf("n a= %d",t); fread(&t,sizeof(t),1,f); printf("n b= %d",t); fread(&t,sizeof(t),1,f); printf("n tong= %d",t); fread(&t,sizeof(t),1,f); printf("n hieu= %d",t); fread(&t,sizeof(t),1,f); printf("n tich= %d",t); fread(&t,sizeof(t),1,f); printf("n thuong= %d",t); fclose(f); } // ham main int main(){ Nhap(); GhiDuLieu(); DocDuLieu(); // doc và tinh GhiKQ(); // ghi them vao file DocKQ(); getch(); return 0; } Bài 22: Tìm UCLN và BCNN Code: unsigned int UCLN(unsigned int a,unsigned int b) { return (b==0)?a:UCLN(b, a%b); } unsigned int BCNN(unsigned int a,unsigned int b){ return (a*b/UCLN(a,b)); }
  • 12. 3 đoạn code tìm số Fibo (cách khử đệ quy bình thường thì khỏi nói) Code: double Fibo1(long n){ //De quy -------- O(2^n) return (n==1 || n==2)?1:(Fibo1(n-1)+Fibo1(n- 2)); } double Fibo3(long n){ //Dung cong thuc ------ O(1) return ( (1/sqrt(5))*(powl(((1+sqrt(5))/2),n) - powl(((1-sqrt(5))/2),n)) ); } double fibo[1000000]; double makefibo(long n){ //Quy hoach dong (De quy dung mang luu tru) ------ O(n) return (n==1)?1:(fibo[n]=makefibo(n-1) + fibo[n-2]); } Cũng kiểm tra số nguyên tố nhưng .. 1 dòng - bù lại thì do dùng đệ quy nên chưa tối ưu Code: int ngto2(int i, int n){//Test: ngto2(i/2,i) return (n==0 || n==1)?0:((n==2 || n==3)?1:((i==2)?(n%i):((!(n%i))?0:ngto2(i-1,n)))); } Đảo ngược số trực tiếp mà không dùng mảng. 1234 -> 4321 Code: int daoso(int n, int &x){//Ket qua luu vao x. n=1234 -> x=4321 if (n<10) return x=x*10+n; x= x*10 + (n%10); return daoso(n/10,x); }