2013-07-31 82 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; 
}