qq_41525202 2020-03-15 15:08 采纳率: 0%
浏览 191

用C语言求全排列怎么求呀,在网上找的代码看不懂555

有没有人会写逻辑简单点的,好理解的,谢谢
感觉全排列好难。。。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-15 18:23
    关注

    1个数字全排列 1 种
    2个数字全排列,分别把 1 2 排前面,剩下的1个数字跟后面
    3个数字全排列,分别把 1 2 3 排前面,每次剩下2个数字,对它全排列。
    n个数字全排列,分别把1 2 3 ... n 放在前面,然后每个后面对 n - 1 全排列。
    因此就可以递归了

    #include<stdio.h>
    #include<string.h>
    void swap(char *a,char *b)
    {
        char temp;
        temp = *a;
        *a = *b;
        *b = temp;  
    }
    
    void  Allarrange(char *str,int k,int len)
    {
        int i;
        if(k==len)
        {
            static int s_i=1;
            printf("第%d种排列为:\t%s\n",s_i++,str);
        }
        else
        {
            for(i=k;i<=len;i++)
            {
                swap(str+i,str+k);
                Allarrange(str,k+1,len);
                swap(str+i,str+k);
            }
        }
    }
    
    int main()
    {
        char str[10];
        printf("请输入排列的字符串:"); 
        gets(str);
        Allarrange(str,0,strlen(str)-1);
        return 0;
    }
    
    
    评论

报告相同问题?