10个数字中取6个数字排列,有10!/4!种排列。可以用递归来实现。
char[] arrange(char[] myA,int K)
//返回数组MyA在K=k时的所有排列的数组.
{
char[] theA;
int count;if(K=1)
//如果K=1,返回数组MyA.
return myA;
//否则,返回myA中每个数myA[i]和剩下的数在K=k-1夏的所有排列.
else
{
count=0;
for(int i=0;i<Length;i++)
//Length是myA中元素的个数.
//想办法取到它.
{
char[] restA;
char[] returnA;
restA=myA-i;
//restA是myA中除去第i个元素的数组.
//递归调用
//取restA在K-1时的所有组合.
returnA=arrange(restA,K-1);
for(int j=0;j<LengthOfReturnA;j++)
{
//myA中每个数myA[i]和returnA的排列
theA[count]=myA[i]+returnA[j];
count++;
}
}
return theA;
}
}

解决方案 »

  1.   

    #include <stdio.h>
    // N个数的全排列:typedef void (*MyOutputFunc)(int numb, char out[]);void Iterate(int n, char in[], char out[], int nmax, int& numb, MyOutputFunc f)
    {
    if( n == 0 )
    {
    f(numb++, out);
    return;
    }
    for(int i = 0; i < nmax; i++)
    {
    if( in[i] != -1 )
    {
    out[nmax-n] = in[i];
    in[i] = -1;
    Iterate(n-1, in, out, nmax, numb, f);
    in[i] = out[nmax-n];
    }
    }
    }void PrintP(int numb, char out[])
    {
    printf("[%08d]: %s\n", numb, out);
    }#define MAX  62
    main()
    {
    char    in[MAX+1], out[MAX+1];
    int     numb = 0;
    for( int i = 0; i < MAX; i++ )
    {
    if( i < 26 ) in[i] = 'a'+i;
    else if( i < 52 ) in[i] = 'A'+i-26;
    else in[i] = '0'+i-52;
    out[i] = -1;
    }
    in[i] = out[i] = 0;
    Iterate(MAX, in, out, MAX, numb, PrintP);
    printf("\nAll items are %d\n", numb);
    return 0;
    }
      

  2.   

    for i1=0 to 9
     for i2=0 to 9
      for i3=0 to 9
       for i4=0 to 9
        for i5=0 to 9
         for i6=0 to 9