Bài viết [Java]Thuật toán in ra tất cả các dãy nhị phân có độ dài n

Thảo luận trong 'Java/Java Script' bắt đầu bởi IME, 11 Tháng chín 2011.

  1. Offline

    IME

    • Quy ẩn giang hồ

    Số bài viết:
    219
    Đã được thích:
    196
    Điểm thành tích:
    240
    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;
                }
            }
            }
        }
        
        
    }
    normal, interpollyvinhr00m thích bài này.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí