问题:全排列-区间数排列
题目描述
对n和m之间的数进行全排列(包括n和m,且:0<n<m<30),并且输出所有的排列结果
输入
两个整数,分别为n和m
输出
n和m之间所有数的全排列结果
样例输入
5 7
样例输出
5 6 7
5 7 6
6 5 7
6 7 5
7 5 6
7 6 5
1 #include<stdio.h> 2 #include<string.h> 3 int n,m; 4 void fun(int b[],int k){ 5 int i,j; 6 int t; 7 if(!b[k]){ 8 for(i=0;b[i];i++){ 9 if(i==m-n) 10 printf("%d",b[i]); 11 else 12 printf("%d ",b[i]); 13 } 14 printf("\n"); 15 return; 16 } 17 for(i=k;i<=m-n;i++){ 18 t=b[i]; 19 for( j=i-1 ; j>=k ; j-- ) 20 b[j+1]=b[j]; 21 b[k]=t; 22 fun(b,k+1); 23 t=b[k]; 24 for( j=k ; j<=i ; j++) 25 b[j]=b[j+1]; 26 b[i]=t; 27 } 28 29 } 30 int main(){ 31 int k=0; 32 int b[30]; 33 int i,l=0; 34 memset(b,0,sizeof(b)); 35 scanf("%d%d",&n,&m); 36 for(i=n;i<=m;i++) b[l++]=i; 37 fun(b,k); 38 return 0; 39 }