Hàm đệ quy sinh mật khẩu

e có bài này ạ: Viết chương trình sinh ra tất cả mật khẩu từ một tập các kí tự. Các kí tự trong tập hợp có thể không được dùng lần nào hoặc dùng nhiều lần. Mật khẩu có độ dài tối đa bằng số lượng phần tử trong tập hợp.

Đầu vào: Một xâu kí tự chứa các kí tự của tập hợp.

Đầu ra: Tất cả các xâu có thể từ các kí tự trong tập đã cho. Mỗi xâu trên một dòng.
e làm như này:

#include <iostream>
#include <string.h>
using namespace std;

void gen (string s, string s1, int n)
{
    string str[n];
    for (int i=0; i<n; i++)
    {
        str[i]=s1+s[i];
        if (str[i].length()<n)
        {
            cout << str[i] << endl;
            gen (s,str[i],n);
        }
        else if(str[i].length()==n)
            cout << str[i] << endl;
        else 
            gen (s,str[i],n);
    }
}

int main()
{
    string s;
    cin >>s;
    int n = s.length();
    string s1;
    gen(s,s1,n);
    //gen2(s,s1,n);
    return 0;
}

nếu chuỗi là ab thì sẽ in ra các mật khẩu có kí tự a trước rồi mới đến b, nhưng nếu muốn in ra các mật khẩu có chiều dài từ bé đến lớn thì làm như nào ạ?
vd: a b aa ab ba bb

Bạn có thể mô tả kỹ hơn về đề bài được không, hoặc là chụp lại đề gốc lên đây cũng được.

3 Likes

Viết chương trình sinh ra tất cả mật khẩu từ một tập các kí tự. Các kí tự trong tập hợp có thể không được dùng lần nào hoặc dùng nhiều lần. Mật khẩu có độ dài tối đa bằng số lượng phần tử trong tập hợp.

Đầu vào: Một xâu kí tự chứa các kí tự của tập hợp.

Đầu ra: Tất cả các xâu có thể từ các kí tự trong tập đã cho. Mỗi xâu trên một dòng.

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