青奥会入场,要求按国家名字的字母序输出信息,东道主最后输出,哪里错了?为什么Japan排在Germany前面?

  1. #include

  2. #include

  3. struct country

  4. {

  5. int order;
    
  6. char name[20];
    
  7. int number;
    
  8. char continent[20];
    
  9. };

  10. int main()

  11. {

  12. struct country cou[100],temp;
    
  1. int n,i,j;
    
  1. while(scanf("%d",&n)!=EOF)
    
  2. {
    
  3.     for(i=0;i
    
  4. scanf("%d %s %d %s",&cou[i].order,cou[i].name,&cou[i].number,cou[i].continent);

  1.     for(i=0;i
    
  2.         if(strcmp(cou[i].name,"China")==0)
    
  3.         {
    
  4.             temp=cou[i];
    
  5.             cou[i]=cou[n-1];
    
  6.             cou[n-1]=temp;
    
  7.         }
    
  1.     for(i=0;i
    
  2.         for(j=0;j
    
  3.             if(strcmp(cou[i].name,cou[i+1].name)>0)
    
  4.             {
    
  5.                 temp=cou[i];
    
  6.                 cou[i]=cou[i+1];
    
  7.                 cou[i+1]=temp;
    
  8. }

  1.     for(i=0;i
    
  2.         printf("%d %s %d %s\n",cou[i].order,cou[i].name,cou[i].number,cou[i].continent);
    
  3. }
    
  1. return 0;
    
  2. }

img

img

根据图片里提供的样例,应该是因为程序的排序方式错了,因为样例里应该是根据国家信息结构里的number成员变量从小到大排序国家信息,然后输出的,根据这一点,修改如下:

#include<stdio.h>

#include<string.h>

struct country

{

    int order;
    char name[20];
    int number;
    char continent[20];
};

int main()

{

    struct country cou[100],temp;
    int n,i,j;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
            scanf("%d %s %d %s",&cou[i].order,cou[i].name,&cou[i].number,cou[i].continent);
    
       for(i=0;i<n-1;i++){
               for(j=i+1;j<n;j++){
                   if(cou[i].number>cou[j].number){
                       temp = cou[i];
                       cou[i]=cou[j];
                       cou[j]=temp;
                }
            }
       } 
    
    
        for(i=0;i<n;i++)
            printf("%d %s %d %s\n",cou[i].order,cou[i].name,cou[i].number,cou[i].continent);
    }
    return 0;
}

img