PAT1038有个Case 过不去,谢谢
给个不能通过的数据也行,谢谢
http://pat.zju.edu.cn/contests/pat-a-practise/1038
#include<stdio.h>
#include<stdlib.h>
char s[10010][10];
int cmp(const void *a,const void *b)
{//字符串比较,如32和321,从头开始比较,3和3相等,2和2相等,第三位:第一个字符串结束了,
//第二个字符串为1,因为1小于3,所以321小于32
int i;
char *aa=(char *)a;
char *bb=(char *)b;
i=0;
while(*(aa+i)&&*(bb+i))
{
if(*(aa+i)!=*(bb+i))
return *(aa+i)-*(bb+i);
else
i++;
}
if(!*(aa+i))
return *aa-*(bb+i);
else
return *(aa+i)-*bb;
}
int cmp1(const void *a,const void *b)
{//字符串比较,排除前导0后再比较,比如0032和000321,实际比较32和321
char s1[30],s2[30],s3[30];
int i,j;
char *aa=(char *)a;
char *bb=(char *)b;
strcpy(s1,a);
strcpy(s2,b);
strcat(s1,s2);
strcpy(s2,b);
strcpy(s3,a);
strcat(s2,s3);
i=0;
while(s1[i]=='0'&&s1[i])
i++;
j=0;
while(s2[j]=='0'&&s1[j])
j++;
if(!s1[i])
return 1;
else
return cmp(&s1[i],&s2[j]);
}
int com(char s[])
{
int i,x;
i=0;
x=0;
while(s[i])
{
x=x*10+s[i]-'0';
i++;
}
return x;
}
int main()
{
int n,i,j,flag;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",s[i]);
qsort(s,n,sizeof(s[0]),cmp1);
i=1;
while(com(s[0])==0&&n-i>0)
{
qsort(&s[i],n-i,sizeof(s[0]),cmp1);
i++;
}
if(n-i>0)
qsort(&s[i],n-i,sizeof(s[0]),cmp);
flag=0;
for(i=0;i<n;i++)
{
if(flag==0)
{
j=0;
while(s[i][j]=='0'&&s[i][j])
j++;
while(s[i][j])
{
printf("%c",s[i][j++]);
flag=1;
}
}
else
printf("%s",s[i]);
}
if(flag==0)
printf("0");
printf("\n");
return 0;
}
[解决办法]
4
10 10 10 101