Kết quả sai khi làm bài tập sinh xâu nhị phân

Em làm bài sinh xâu nhị phân có độ dài n mà ở đó ko có 2 kí tự 1 đứng liền nhau mà chạy ko in ra kết quả. Ai chỉ cho e chỗ sai với ạ

#include <bits/stdc++.h>
using namespace std;
string s;
int n;
void lam(int i)
{
    if (i<=n)
    {
        s[i]='0';
        lam(i+1);
        s[i]='1';
        lam(i+1);
    }
    else
    {
        bool d=true;
        for (int k=0;k<=n-2;k++) if (s[k]=='1'&&s[k+1]=='1') d=false;
        if (d)
        {
            cout<<s<<' ';
            return;
        }
    }
}
int main()
{
    cin>>n;
    lam(0);
    return 0;
}

Làm gì mà đệ quy rườm rà thế?

Một hàm với tham số n, và 1 vòng lặp bên trong là xong.
Sinh xâu ngẫu nhiên thì dùng đến rand() nữa.

1 Like

Thớt cũng khá là máy móc đó :smiley: quay lui thì nếu bit liền trước là 1 thì lựa chọn duy nhất là 0.

Với lại ban đầu phải dành slot sẵn thì mới viết được s[i] = '1'.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?