2013-07-31 2 views
1

intergers의 배열이 주어진 경우. 배열에있는 숫자의 모든 순열을 인쇄하는 프로그램 방법. 출력은 증가하지 않는 순서로 정렬되어야합니다. 어레이에 대한 예를 들어 {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; 
} 
관련 문제