:洛谷:P1012拼数
废话不多说,上AC代码
这道题写过后,发现C++是真的香!sort就完事了!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(x,y) x>y?x:y
struct st{
int x[1001];
int num;
}s[1001],t1;
void fun(int a[],int n)
{
int t;
for(int i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;
}
}
void fun1(int s[],int n)
{
for(int i=0;i<n;i++)
printf("%d",s[i]);
}
int fun2(int a[],int b[],int n,int m)
{
int i=0;
for(i=0;i<n;i++)
{
if(a[i]!=b[i])
break;
}
if(a[i]>b[i])
{
if(a[i]>b[0])
{
;
}
else if(a[i]<b[0])
{
b[i]=10;
}
}
if(a[i]<b[i])
{
if(b[i]>a[0])
{
;
}
if(b[i]<a[0])
{
a[i]=10;
}
}
int len=max(n,m);
for(i=0;i<len;i++)
{
if(a[i]==b[i])
{
continue;
}
else if(a[i]<b[i])
{
return 1;
}
else if(a[i]>b[i])
{
return 0;
}
}
return 0;
}
int main()
{
int n,k=0;
int a[1001],t;
int max1=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
memset(s[i].x,0,sizeof(s[i].x));
t=a[i];
while(t)
{
s[i].x[k++]=t%10;
t/=10;
}
s[i].num=k;
fun(s[i].x,s[i].num);
k=0;
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(fun2(s[i].x,s[j].x,s[i].num,s[j].num))
{
t1=s[i];
s[i]=s[j];
s[j]=t1;
}
}
}
for(int i=0;i<n;i++)
fun1(s[i].x,s[i].num);
return 0;
}