#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); 
 }

解决方案 »

  1.   

    如果不允许重复:
    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);
    }
      

  2.   

    如果允许重复:
    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);
    }
      

  3.   

    在允许重复的程序里这句:
    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]+",");
    }