1、2、3三个数,排列最终结果如下:
111 121 131
112 122 132
113 123 133211 221 231
212 222 232
213 223 233311 321 331
312 322 332
313 323 333用递归解决。要求可扩展,即不限制无素个数。

解决方案 »

  1.   

    char ss[64];
    void aaaa(int r, int s, int b)
    {
    for (int i = 1; i <= r; i++)
    {
    ss[s] = '0' + i;
    if (s == b - 1)
    {
    ss[s + 1] = 0;
    printf(ss);
    printf("\r\n");
    }
    else
    aaaa(r, s + 1, b);
    }
    }
      

  2.   

    char ss[64];
    void aaaa(int r, int s, int b)
    {
        int i;
        for (i = 1; i <= r; i++)
        {
    ss[s] = '0' + i;
    if (s == b - 1)
    {
        ss[s + 1] = 0;
        printf(ss);
        printf(" ");
    }
    else
        aaaa(r, s + 1, b);
        }
        printf("\r\n");
    }void main()
    {
        aaaa(3, 0, 3);
    }改进了一下,你的情况,调用方法为
    aaaa(3, 0, 3); 这个函数,第二个参数调用时,都为0,第一个参数为取范围,比如4,则取值范围为1到4,第三个参数为组成的数字的位数,比如4,则为一个4位数:
    1111 1112 1113
    1121 1122 1123...
      

  3.   

    谢谢yang79tao,如果是任意字符串,怎么办?
      

  4.   

    那么ss[s] = '0' + i;一句怎么改?
      

  5.   

    还有,ss[s + 1] = 0;一句是否也需改?
      

  6.   

    对啊,当然需要改,你说到重点上了。换成任意字符的话:
    ss[s] = '0' + i;
    //origin[]是你存储所有需要排序的字符的数组
    //char origin[10]={a,b,c,d,e,f,g..}
    改为ss[s] = origin[i];换成任意字符串的话,ss的类型需要改成指针数组,origin[]也是。
    原理都一样。
      

  7.   

    我的程序如下,可为什么结果会错误呢,请教...
    char ss[128];
    pai1(str,strlen(str),0,strlen(str));//调用
    void CPasswordArrayDlg::pai1(char origin[],int r, int s, int b)
    {
        int i;
        for (i = 1; i <= r; i++)
        {
    ss[s] = origin[i];
    if (s == b - 1)
    {
    ss[s + 1] = 0;
    sum++;
    temp.Format("%ld\t",sum);
    file.Write(temp,temp.GetLength());
    file.Write(ss,strlen(ss));
    file.Write("\r\n",strlen("\r\n"));
    }
    else
    pai1(ss,r,s+1,b);
        }
    }
      

  8.   

    我的方法发下,只是时间复杂度大,供参考.
    void MyPer(CString str, int n, CString pre)
    {
    for(int i=0; i<str.GetLength(); i++)
    {
    if( n==str.GetLength()-1 )
    {
    count++;
    message.Format("%ld\t",count);
    file.Write(message,message.GetLength());
    message=pre + str.GetAt(i);
    file.Write(message,strlen(message));
    file.Write("\r\n",strlen("\r\n"));
    }
    else
    MyPer(str, n+1, pre+str.GetAt(i));
    }
    }