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