2013-07-31 79 views
1

给定一个整数数组。如何让程序打印数组中所有数字的排列。输出应该按照不增加的顺序排序。例如,对于数组{12,4,66,8,9},输出应该是:以非递增顺序打印整数数组的排列

9866412 

9866124 

9846612 

.... 

.... 

1246689 
+0

获取数组置换见[这里](http://stackoverflow.com/questions/2920315 /置换-的阵列)。此外,您必须在阵列上执行[排序算法](http://www.sorting-algorithms.com/)(您可以选择一个您喜欢的),然后就完成了。 – MaVVamaldo

+0

你在用什么语言? – Goatcat

+0

我正在使用C++。谢谢,它工作 – amudhan3093

回答

0
#include<algorithm> 
#include<iostream> 
#include<stdio.h> 
#include<math.h> 
using namespace std; 
int totaldigits=0; 
int x[10000000]; 
int countx=0; 
int finddigits(int num) 
{ 
    int counter=0; 
    while(num!=0) 
    { 
     num=num/10; 
     counter++; 
    } 
    return counter; 
} 
int arrdigits(int *a,int size) 
{ 
    int count=0; 
    for(int i=0;i<=size;i++) 
    { 
    count+=finddigits(a[i]); 
    } 
    return count; 
} 
int findval(int n) 
{ 
totaldigits-=finddigits(n); 
return(pow(10,totaldigits)*n); 
} 
void findnum(int *a,int size) 
{ 
    x[countx]=0; 
    int n=0; 
    for(int i=0;i<=size;i++) 
    { 
    n+=findval(a[i]); 
    } 
    x[countx]=n; 
    countx++; 
} 
void swap(int *a,int *b) 
{ 
int *temp; 
*temp=*a; 
*a=*b; 
*b=*temp; 
} 
void permute(int *arr,int start,int end) 
{ 
if(start==end) 
{ 
totaldigits=arrdigits(arr,end); 
findnum(arr,end); 
} 
else 
{ 
    for(int j=start;j<=end;j++) 
    { 
     swap(arr[start],arr[j]); 
     permute(arr,start+1,end); 
     swap(arr[start],arr[j]); //BACKTRACK 
    } 
} 
} 
int main() 
{ 
int a[]={12,4,66,8,9}; 
totaldigits=arrdigits(a,4); 
permute(a,0,4); 
sort(x,x+countx); 
for(int i=countx-1;i>=0;i--) 
fprintf(stdout,"%ld\n",x[i]); 
system("pause"); 
return 0; 
}