Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2538813
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-04-14 12:31:11

    输入一个数字序列,将该序列进行排列,并输出每一种排列方式。
    其实也就是,我们上高中时,学习的排列组合。我们可以使用递归思想,即,每次从该数组中顺序的取出一个元素,然后将剩下的进行排列,组合。然后剩下的元素也就是递归操作,代码如下:
  1. #include <stdio.h>

  2. #define MAX 100

  3. perm(int a[], int n, int s, int r[], int m)
  4. {
  5.   int i,j,k,flag = 0;
  6.   int b[MAX];

  7.   for(i=0; i<n; i++){
  8.     flag = 1;
  9.     r[s] = a[i];
  10.     j = 0;
  11.     
  12.     for(k=0; k<n; k++)
  13.       if(i != k){
  14.         b[j] = a[k];
  15.         j++;
  16.       }

  17.     perm(b,n-1,s+1,r,m);
  18.   }

  19.   if(flag == 0){
  20.     printf("\n");
  21.     for(k=0; k<m; k++)
  22.       printf("%d",r[k]);
  23.     printf("\n");
  24.   }
  25. }

  26. int main(int argc, char *argv[])
  27. {
  28.   int a[MAX],r[MAX];
  29.   int i,n;
  30.   printf("please input the number of digit in the array\n");
  31.   scanf("%d",&n);
  32.   printf("please input a string for array\n");
  33.   for(i=0; i<n; i++)
  34.     scanf("%d",&a[i]);

  35.   perm(a,n,0,r,n);
  36.   return 0;
  37. }
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

阅读(1119) | 评论(0) | 转发(0) |
0

上一篇:移数字游戏

下一篇:完全数

给主人留下些什么吧!~~