22/9/2011, 9:05 am
Ví dụ: với 3 bit, n=3 ta có
000
001
010
011
100
101
110
111
- Code:
#include <iostream.h>
#include <conio.h>
#define MAX 8
void main()
{
int a[MAX],n,i,d;
//===========Nhap
do
{
cout<<"Nhap so bit (gia tri nho hon 8)\n";
cout<<"n = ";cin>>n;
}while(n<1||n>MAX);
//===========Xuat
for( i=0;i<n;i++) //****Xay dung cau hinh dau 00...0
a[i]=0;
while(i>=0)
{
for(i=0;i<n;i++) //****In ra cau hinh hien co
cout<<a[i];
cout<<"\n";
i=n-1; //****Tim so 0 dau tien trong day
//Ch0 i=n-1 vi ta xet tu vi tri cuoi cua day
while(i>=0&&a[i]==1) //Ta di tim so 0 dau tien bat gap nen qua trinh lap lai khi a[i]=1
// va dieu kien i>=0 de khi khong tim thay so 0 nao (tuc dat cau hinh cuoi 11...1) se dung va luc do i=-1
i--;
if(i>=0) // Chua gap cau hinh cuoi 11...1
{
a[i]=1;
for( d=1;d<=n-i;d++)
a[i+d]=0;
}
}
getch();
}
Tham khảo thêm thuật toán đệ quy :
- Code:
#include <iostream.h>
#include <conio.h>
int x[30];
void Try(int i, int n)
{
for (int k=0; k<=1; k++)
{
x[i] = k;
if (i==n-1)
{
for (int j=0;j<=i;j++) cout<<x[j];
cout<<"\n";
}
else Try(i+1, n);
}
}
void LKNhiPhan(int n)
{
Try(0, n);
}
void main()
{
int n;
cout<<"Nhap n = ";cin>>n;
LKNhiPhan(n);
}