Sorting 以非递增顺序打印整数数组的排列
给定一个整数数组。如何使用程序打印数组中数字的所有排列。输出应按非递增顺序排序。例如,对于数组{12,4,66,8,9},输出应为:Sorting 以非递增顺序打印整数数组的排列,sorting,permutation,Sorting,Permutation,给定一个整数数组。如何使用程序打印数组中数字的所有排列。输出应按非递增顺序排序。例如,对于数组{12,4,66,8,9},输出应为: 9866412 9866124 9846612 .... .... 1246689 #包括 #包括 #包括 #包括 使用名称空间std; 整数位数=0; 整数x[10000000]; int countx=0; int finddigits(int num) { int计数器=0; while(num!=0) { num=num/10; 计数器++;
9866412
9866124
9846612
....
....
1246689
#包括
#包括
#包括
#包括
使用名称空间std;
整数位数=0;
整数x[10000000];
int countx=0;
int finddigits(int num)
{
int计数器=0;
while(num!=0)
{
num=num/10;
计数器++;
}
返回计数器;
}
整数位数(整数*a,整数大小)
{
整数计数=0;
对于(int i=0;我得到一个数组排列,请参见。此外,您必须在数组上执行一个(您可以选择您喜欢的一个),然后您就完成了。您使用的是什么语言?我使用的是c++。谢谢,这很有效
#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;
}