Tinh thần thuật toán này là dùng vòng while để chạy đến khi dãy bit cuối cùng được in. Trong mỗi vòng lặp sẽ in ra dãy số, cho con trỏ i chạy từ n về 0 /*từ phải qua trái*/ nếu gặp bit 0 thì đổi về 1. và ngược lại. Thuật toán khá đơn giản, đã chạy thử thành công. Mã: import java.util.Scanner; public class daybitn { public static void main(String[] arg) { System.out.print("moi nhap do dai day nhi phan"); Scanner scn=new Scanner(System.in); int n=scn.nextInt(); int a[]= new int[n]; // cấp phát động int last=0; // biến đánh dấu vị trí cuối, để kết thúc vòng lặp, đi từ 0 đến n. while(last<n) { //in ra dãy bit for(int i=0;i<n;i++) { System.out.print(a[i]) }System.out.println(); //nếu bit ở vị trí last chuyển thành 1 thì nhảy lên một bước. if(a[last]==1) last+=1; /*vòng lặp duyệt qua dãy bit, nếu phần tử là 0 thì đổi thành 1 và kết thúc vòng lặp. ngược lại nếu là 1 thì nó sẽ đưa về 0 và vòng lặp sẽ xét tiếp phần tử tiếp theo. Thuật toán này làm theo đúng cách chúng ta duyệt các dãy bit bằng tay, bắt đầu với 000... và kết thúc bằng 111...*/ for( int i=n-1;i>=0;i--) { if(a[i]==0) { a[i]=1; break; } else { a[i]=0; } } } } }