1
intergers의 배열이 주어진 경우. 배열에있는 숫자의 모든 순열을 인쇄하는 프로그램 방법. 출력은 증가하지 않는 순서로 정렬되어야합니다. 어레이에 대한 예를 들어 {12, 4, 66, 8, 9} 출력 같아야정수 배열의 순열을 증가하지 않는 순서로 인쇄하십시오.
9866412
9866124
9846612
....
....
1246689
intergers의 배열이 주어진 경우. 배열에있는 숫자의 모든 순열을 인쇄하는 프로그램 방법. 출력은 증가하지 않는 순서로 정렬되어야합니다. 어레이에 대한 예를 들어 {12, 4, 66, 8, 9} 출력 같아야정수 배열의 순열을 증가하지 않는 순서로 인쇄하십시오.
9866412
9866124
9846612
....
....
1246689
#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;
}
가 배열 순열 [여기] 참조 얻는 (http://stackoverflow.com/questions/2920315/순열 배열). 또한 배열에서 [정렬 알고리즘] (http://www.sorting-algorithms.com/) (원하는 알고리즘을 선택할 수 있음)을 수행해야합니다. – MaVVamaldo
어떤 언어를 사용하고 있습니까? – Goatcat
C++을 사용하고 있습니다. 감사합니다. – amudhan3093