1
給定一個整數數組。如何讓程序打印數組中所有數字的排列。輸出應該按照不增加的順序排序。例如,對於數組{12,4,66,8,9},輸出應該是:以非遞增順序打印整數數組的排列
9866412
9866124
9846612
....
....
1246689
給定一個整數數組。如何讓程序打印數組中所有數字的排列。輸出應該按照不增加的順序排序。例如,對於數組{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