数学趣题——数字的全排列
应用递归思想求全排列
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: