weixin_45740178
A!ive
采纳率34.5%
2019-11-10 17:16 阅读 418

请问这题为什么报错呢?

#include
#include

int main()
{
char s1[100][100];
int a[1000];
int b[1000];
char s2[100][100];
int n;
int i;
char temp1[100][100];
char temp2[100][100];
char temp3[100][100];
char temp4[100][100];
while(scanf("%d",&n)!=EOF)
{

          for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                scanf("%s",&s1[i]);
                scanf("%d",&b[i]);
                scanf("%s",&s2[i]);

            }
            for(i=0;i<n;i++)
                {
                    int k=i+1;
                    while(k<n)
                        {   
                            int j;
                                for(j=0;j<strlen(s1[k])||j<strlen(s1[i]);j++)
                                    {

                                        if((s1[i][j]-s1[k][j])>0)
                                            {
                                                strcpy(temp3[k],s1[i]);
                                                strcpy(temp4[i],s1[k]);
                                                strcpy(s1[k],temp3[k]);
                                                strcpy(s1[i],temp4[i]);
                                                strcpy(temp1[k],s2[i]);
                                                strcpy(temp2[i],s2[k]);
                                                strcpy(s2[k],temp1[k]);
                                                strcpy(s2[i],temp2[i]);
                                                int t=b[i];
                                                b[i]=b[k];
                                                b[k]=t;
                                                break;
                                            }
                                        else if((s1[i][j]-s1[k][j])<0)
                                         break;


                                    }

                            k++;
                        }
                }
                int k=1;
         for(i=0;i<n;i++)
            {   
                if(s1[i][0]=='C'&&s1[i][1]=='h'&&s1[i][2]=='i'&&s1[i][3]=='n'&&s1[i][4]=='a')
                continue;
                printf("%d %s %d %s\n",k,s1[i],b[i],s2[i]);
                k++;
                 }  

        for(i=0;i<n;i++)
            {   

                if(s1[i][0]=='C'&&s1[i][1]=='h'&&s1[i][2]=='i'&&s1[i][3]=='n'&&s1[i][4]=='a')

                 {

                    printf("%d %s %d %s\n",k,s1[i],b[i],s2[i]);
                    k++;
                    }
                 }       

        }   


return 0;

}
按照国家名字的英文字母顺序来出场。请编写一个计算机程序实现国家名字的排序(升序),中国(China)在最后一个

输入描述:
多组输入,其中每组输入的第一行表示参加国家数 n(占一行),下面 n 行是国家的报名信息(序号、国家名称、参加人数、所属大洲)

输出描述:
按国家名字的字母序输出信息(东道主国家名字最后输出)。

样例输入:
5

1 France 123 Europe

2 Russia 254 Europe

3 Japan 235 Asia

4 Germany 185 Europe

5 China 560 Asia

样例输出:
1 France 123 Europe

4 Germany 185 Europe

3 Japan 235 Asia

2 Russia 254 Europe

5 China 560 Asia

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2019-11-10 21:05

    你的程序写得太乱,重新帮你写了一个

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char s1[100][100]; 
    int a[1000];
    int b[1000];
    char s2[100][100];
    int order[100];
    
    int cmp(const void *a, const void *b)
    {
        int i = *(int *)a;
        int j = *(int *)b;
        if (strcmp(s1[i], "China") == 0) return 1;
        if (strcmp(s1[j], "China") == 0) return -1;
        return strcmp(s1[i], s1[j]);
    }
    
    int main()
    {
        int i, n;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            scanf("%s",&s1[i]);
            scanf("%d",&b[i]);
            scanf("%s",&s2[i]);
            order[i] = i;
        }
        qsort(order, n, sizeof(int), cmp);
        for(i=0;i<n;i++)
        {   
            printf("%d %s %d %s\n",a[order[i]],s1[order[i]],b[order[i]],s2[order[i]]);
        }  
        return 0;
    }
    
    

    图片说明

    问题解决请及时采纳

    点赞 评论 复制链接分享

相关推荐