首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

PAT1038有个Case 过不去,多谢

2013-03-14 
PAT1038有个Case 过不去,谢谢给个不能通过的数据也行,谢谢http://pat.zju.edu.cn/contests/pat-a-practise

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

热点排行