您的位置:首页 > 其它

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

2010-05-26 10:13 239 查看
应用递归思想求全排列

#include <stdio.h>
#define max 100
void Perm(int a[], int n , int s , int r[], int m)
{
 int i, j, k, flag = 0;
 int b[max];/*数组b存放子序列*/
 for(i = 0; i < n; i++)
{
 flag = 1;
 r[s] = a[i];/*复制数列a中第i个元素到数组r*/
 j = 0;
 for(k = 0; k < n; k++)/*产生子序列b*/
{
 if(i != k) 
{
 b[j] = a[k];
 j++;
}
}
 Perm(b, n - 1, s + 1, r, m); /*全排列子序列b*/
}
 if(flag == 0)
{ /*得到一种排列结果*/
 printf("\n");
 for(k = 0; k < m; k++)
 printf("%d ", r[k]); /*输出存放排列结果的数组r中的内容*/
 printf("\n");
}
}
int main()
{
 int a[max] , r[max];
 int i, n;
 printf("Please input the number of digit inthe array\n");
 scanf("%d", &n); /*输入待排列的数列中元素的个数*/
 printf("Please input a string for array\n");
 for(i = 0; i < n; i++)/*输入数列中的元素(整数)*/
 scanf("%d", &a[i]);
 Perm(a, n, 0, r, n);/*全排列操作*/
 return 0;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: