以非递增顺序打印整数数组的排列

时间:2013-07-31 05:28:02

标签: sorting permutation

鉴于一系列的意外。如何打印程序打印数组中所有数字的排列。输出应按非递增顺序排序。例如,对于数组{12,4,66,8,9},输出应为:

9866412

9866124

9846612

....

....

1246689

1 个答案:

答案 0 :(得分: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;
}