Come as guests, stay as family.

I ♥ 4MGHC


Hướng dẫn sử dụng diễn đàn Với mong muốn có một Website hỏi đáp chất lượng 4MGHC đã ra đời. Đây là cộng đồng hỏi đáp dành cho lập trình viên, sinh viên, các bạn ưu thích lập trình... Việt Nam. Huy vọng các bậc tiền bối, các bằng hữu gần xa chung tay chia sẽ, giúp đỡ, giải đáp các thắc mắc trên Website. Cùng nhau củng cố, đóng góp cho sự nghiệp phát triển thông tin, công nghệ của đất nước.
Trong diễn đàn bạn có thể
  1. Hỏi đáp trong diễn đàn
  2. Đánh giá và like bài post
Đăng ký

Số người đang xem trên diễn đàn: 1284
1
  1. Tân thế giới
    Posts:
    784320
    Vote:
    2
    Like:
    3
    duyệt xâu nhị phân, sinh hoán vị, sinh tổ hợp. Tìm lỗi sai giúp mình
    Image
    Image
    Users online on this topic: 1
    van.duc0409
    Thành viên mới
    Ngày gia nhập: 02 2011
    Nơi ở: hà nội
    Bài viết: 18
    -------------------------
    duyệt xâu nhị phân, sinh hoán vị, sinh tổ hợp. Tìm lỗi sai giúp mình
    em viết chương trình sinh ra xâu nhị phân tiếp theo, sinh hoán vị, tổ hợp tiếp theo.

    khi chạy chương trình này thì chỉ có phần sinh xâu nhị phân là chạy được. Còn sinh hoán vị và tổ hợp (em thấy thuật toán hình như đúng rồi) không chạy đươc. Giúp mình tìm ra lỗi sai đi

    C++ Code:
    Code: Select all

    Lựa chọn code | Ẩn/Hiện code
    #include"iostream.h"
    #include"conio.h"

    int h,k,n,A[100],B[100], OK=1;
    void Result(int A[100],int n) // In ra ket qua
    {
    for(int i=1;i<=n;i++)
    cout<<A[i];
    }

    int Next_Bit_String(int A[100],int n) // Duyet xau nhi phan
    {
    int i=n;
    while(i>0&&A[i]==1)
    {
    A[i]=0; i--;
    }
    if(i>0) A[i]=1;
    else OK=0;
    }

    int Next_Permutation(int A[100],int n) // Sinh hoan vi
    { int t,d;
    int i=n-1;
    while(i>0&&A[i]>A[i+1]) i--;
    if(i>0)
    { int j=n;
    while(j>0&&A[i]>A[j]) j--;
    {
    A[j]=d;A[i]=A[j];A[i]=d;
    }
    int k=n, s=j+1;
    while(k>s)
    {
    A[k]=t;A[k]=A[s];A[s]=t;
    k--;s++;
    }

    }
    else OK=0;
    }

    int Next_Combination(int A[100], int n, int k) // Sinh to hop
    {
    int i=k;
    while(i>0&&A[i]==n-k+i) i--;
    if(i>0)
    {
    A[i]=A[i]+1;
    for(int j=i+1;j<k;j++)
    A[j]=A[i]+j-i ;
    }
    else OK=0;
    }

    main()
    { int i,j;
    cout<<"nhap do dai xau nhi phan k= ";
    cin>>k;
    for(i=1;i<=k;i++) A[i]=0;
    while(OK)
    { Result(A,k);
    cout<<"\nXau nhi phan tiep theo la: ";
    Next_Bit_String(A,k);
    }

    cout<<"\nnhap n= ";
    cin>>n;
    for(j=1;j<=n;j++) B[j]=j;
    while(OK)
    { Result(B,n);
    cout<<"\nhoan vi tiep theo la: ";
    Next_Permutation(B,n) ;
    }

    cout<<"\nnhap h= ";
    cin>>h;
    for(i=1;i<=h;i++) A[i]=i;
    while(OK)
    {
    Result(A,h);
    Next_Combination(A,n,h);
    }

    }
    Image 0
    Image
  2. Bài viết cùng chủ đề:Duyệt xâu nhị phân có độ dài bằng n. helpBiến đổi 1 xâu nhị phân về xâu toàn số 0 ?Liệt kê các xâu nhị phân thuận nghịch như thế nào?sinh xâu nhị phân dùng thuật toán quay lui, giúp mình với !!!Liệt kê xâu nhị phân | Liệt kê chuỗi nhị phân ???Hàm Phát Sinh Hoán Vị N Phần Tử
  3. Ký Túc Xá
    Posts:
    2533979
    Vote:
    21
    Like:
    2
    Image
    Image
    cuonghip
    Thành viên mới
    Ngày gia nhập: 03 2010
    Bài viết: 8
    -------------------------
    Biến OK của bạn khai báo là toàn cục.

    Sau khi gọi hàm Next_Bit_string thì OK=0 rùi. Bạn không gán trả lại giá trị của OK thì trong 2 lần gọi sau đó đoạn chương trình không thực hiện gì cả. Chú ý khi sử dụng biến toàn cục.
    Image 0
    Image
    Image
1