数学趣题——数字的全排列

应用递归思想求全排列

   1: #include <stdio.h>
   2: #define max 100
   3:  
   4: void Perm(int a[], int n , int s , int r[], int m)
   5: {
   6:     int i, j, k, flag = 0;
   7:     int b[max];                    /*数组b存放子序列*/
   8:  
   9:     for(i = 0; i < n; i++)
  10:     {
  11:         flag = 1;
  12:         r[s] = a[i];                /*复制数列a中第i个元素到数组r*/
  13:         j = 0;
  14:         for(k = 0; k < n; k++)      /*产生子序列b*/
  15:         {
  16:             if(i != k) 
  17:             {
  18:                 b[j] = a[k];
  19:                 j++;
  20:             }
  21:         }    
  22:         Perm(b, n - 1, s + 1, r, m); /*全排列子序列b*/
  23:     }
  24:  
  25:     if(flag == 0)
  26:     {               /*得到一种排列结果*/
  27:         printf("\n");
  28:         for(k = 0; k < m; k++)
  29:             printf("%d ", r[k]);       /*输出存放排列结果的数组r中的内容*/
  30:         printf("\n");
  31:     }
  32: }
  33:  
  34: int main()
  35: {
  36:     int a[max] , r[max];
  37:     int i, n;
  38:     printf("Please input the number of digit inthe array\n");
  39:     scanf("%d", &n);               /*输入待排列的数列中元素的个数*/
  40:     printf("Please input a string for array\n");
  41:     for(i = 0; i < n; i++)          /*输入数列中的元素(整数)*/
  42:         scanf("%d", &a[i]);
  43:     Perm(a, n, 0, r, n);            /*全排列操作*/
  44:     return 0;
  45: }
  46:  
原文地址:https://www.cnblogs.com/steven_oyj/p/1744182.html