输入一个数字序列,将该序列进行排列,并输出每一种排列方式。
其实也就是,我们上高中时,学习的排列组合。我们可以使用递归思想,即,每次从该数组中顺序的取出一个元素,然后将剩下的进行排列,组合。然后剩下的元素也就是递归操作,代码如下:
- #include <stdio.h>
-
-
#define MAX 100
-
-
perm(int a[], int n, int s, int r[], int m)
-
{
-
int i,j,k,flag = 0;
-
int b[MAX];
-
-
for(i=0; i<n; i++){
-
flag = 1;
-
r[s] = a[i];
-
j = 0;
-
-
for(k=0; k<n; k++)
-
if(i != k){
-
b[j] = a[k];
-
j++;
-
}
-
-
perm(b,n-1,s+1,r,m);
-
}
-
-
if(flag == 0){
-
printf("\n");
-
for(k=0; k<m; k++)
-
printf("%d",r[k]);
-
printf("\n");
-
}
-
}
-
-
int main(int argc, char *argv[])
-
{
-
int a[MAX],r[MAX];
-
int i,n;
-
printf("please input the number of digit in the 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;
-
}
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out
please input the number of digit in the array
3
please input a string for array
1 2 3
123
132
213
231
312
321
阅读(1125) | 评论(0) | 转发(0) |