例如,对于字符集{a,b}输出为a,b,aa,ab,ba,bb。求解思路如下:
可以先写一个函数,其功能是输出字符集中任意N个字符的任意排列,然后对N从1到strlen(p)(即字符集的元素个数)进行遍历。
函数可以这样写:对于长度为N的字符串,可以先写一个字母,然后生成N-1个字符串,那么组合在一起就是长度为N的字符串了,这样不可以用递归来解决了。代码如下:
- #include <iostream>
- #include <string>
- using namespace std;
- const SIZE=20; // 临时数组的大小,其值一定要大于N
- void Full(char* p,int n,char* s,int m)
- {
- if (n==0)
- {
- s[m]='/0';
- cout<<s<<" ";
- }
- else
- {
- for (int i=0;i<strlen(p);i++)
- {
- s[m]=p[i];
- Full(p,n-1,s,m+1);
- }
- }
- }
- void main()
- {
- char s[SIZE];
- char* p="ab";
- for (int n=0;n<=strlen(p);n++)
- {
- Full(p,n,s,0);
- }
- }