#include <stdio.h>
#define N 30
int a[N],b[N],q[N];
int c=0,d=0,r=3; void comb(int n,int k) /*递归函数*/
{int i,j; for(i=n;i>=k;i--)
{
if( ( k < a[0] ) && ( i >= a[k+1] ) )
continue;
a[k]=i;/*负值的地方*/
if(k>1) comb(n-1,k-1);
else { for(j=a[0];j>0;j--)
{
printf("%4d",b[a[j]-1]); /*输出*/
}
printf("\n"); /*输出*/
}
}
}void main()
{int i,w,j; for(i=0;i<N;i++)
b[i]=i; /*b {a,b,c,....}从b[0]开始 现在是数字*/
i=N;
a[0]=r; /*选几个*/
comb(i,r);
}
#define N 30
int a[N],b[N],q[N];
int c=0,d=0,r=3; void comb(int n,int k) /*递归函数*/
{int i,j; for(i=n;i>=k;i--)
{
if( ( k < a[0] ) && ( i >= a[k+1] ) )
continue;
a[k]=i;/*负值的地方*/
if(k>1) comb(n-1,k-1);
else { for(j=a[0];j>0;j--)
{
printf("%4d",b[a[j]-1]); /*输出*/
}
printf("\n"); /*输出*/
}
}
}void main()
{int i,w,j; for(i=0;i<N;i++)
b[i]=i; /*b {a,b,c,....}从b[0]开始 现在是数字*/
i=N;
a[0]=r; /*选几个*/
comb(i,r);
}
static string[] Group(string[] init, int remain, int bit) {
if (bit > 26) {
throw new ArgumentException("Length Error.");
}
if (bit <= 0) {
return init;
}
if (init == null) {
init = new string[26];
for (char k = 'A'; k <= 'Z'; k++) {
init[k - 'A'] = k.ToString();
}
} else {
string[] res = new string[init.Length * remain];
int cc = 0;
for (int i = 0; i < init.Length; i++) {
for (char k = 'A'; k <= 'Z'; k++) {
if (init[i].IndexOf(k) < 0) {
res[cc++] = init[i] + k;
}
}
}
init = res;
}
return Group(init, remain - 1, bit - 1);
}static string[] Group(int bit) {
return Group(null, 26, bit);
}
static string[] Group(string[] init, int bit) {
if (bit > 26) {
throw new ArgumentException("Length Error.");
}
if (bit <= 0) {
return init;
}
if (init == null) {
init = new string[26];
for (char k = 'A'; k <= 'Z'; k++) {
init[k - 'A'] = k.ToString();
}
} else {
string[] res = new string[init.Length * 26];
int cc = 0;
for (int i = 0; i < init.Length; i++) {
for (char k = 'A'; k <= 'Z'; k++) {
res[cc++] = init[i] + k;
}
}
init = res;
}
return Group(init, bit - 1);
}static string[] Group(int bit) {
return Group(null, bit);
}
if (bit > 26) {
throw new ArgumentException("Length Error.");
}
不需要了,因为允许重复,字符串的长度可以超过26,如果不允许重复,字符串最多有26个字符。使用:
string[] ss = Group(3);
Console.WriteLine(ss.Length);
for(int i = 0; i < ss.Length;i++) {
Console.Write(ss[i]+",");
}