红豆泥! 2021-05-07 09:00 采纳率: 94.4%
浏览 37
已采纳

请问这个代码该如何改?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_ORDER 20
struct information{
	int Order;
	char Name[16];
	int Number;
	char Location[16];
};
int main()
{
	int i,j,n;
	struct information Name_information[MAX_ORDER];
	struct information temp;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d %s %d %s",&Name_information[i].Order,&Name_information[i].Name,&Name_information[i].Number,&Name_information[i].Location);
	for(i=0;i<n-1;i++)
	{
		for(j=i;j<n-1;j++)
		{
			if(strcmp(Name_information[i].Name,Name_information[j].Name)>0)
			{
				temp=Name_information[i];
				Name_information[i]=Name_information[j];
				Name_information[j]=temp;
			}
		}
	}
	for(i=0;i<n;i++)
		printf("%d %s %d %s\r\n",Name_information[i].Order,Name_information[i].Name,Name_information[i].Number,Name_information[i].Location);
}

题目

2014 年 8 月在南京举行第 2 届奥林匹克青年运动会,每个国家在报名参加时需要填写国家名字,参加的人数,所属的洲,同时系统会自动生成一个报名序号,在开幕式的运动员出场顺序上,按照国家名字的英文字母顺序来出场。请编写一个计算机程序实现国家名字的排序(升序),东道主中国(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

  • 写回答

2条回答 默认 最新

  • 正在学C++ 2021-05-07 09:23
    关注
    #include<stdio.h>
    #include<string.h>
    struct information{
        int Order;
        char Name[16];
        int Number;
        char Location[16];
    };
    int main()
    {
        int i,j,n;
        while (~scanf("%d",&n)){
            struct information Name_information[n], China;
            for(i=0;i<n;i++){
                scanf("%d %s %d %s",&Name_information[i].Order,Name_information[i].Name,&Name_information[i].Number,Name_information[i].Location);
                if(strcmp(Name_information[i].Name,"China")==0){ China = Name_information[i]; }
            }
    
            for(i=0;i<n-1;i++)
            {
                for(j=0;j<n-i-1;j++)
                {
                    if(strcmp(Name_information[j].Name,Name_information[j+1].Name)>0)
                    {
                        struct information temp=Name_information[j];
                        Name_information[j]=Name_information[j+1];
                        Name_information[j+1]=temp;
                    }
                }
            }
            for(i=0;i<n;i++){
                if (Name_information[i].Order == China.Order) continue;
                printf("%d %s %d %s\n",Name_information[i].Order,Name_information[i].Name,Name_information[i].Number,Name_information[i].Location);
            }
            printf("%d %s %d %s\n",China.Order,China.Name,China.Number,China.Location);
        }
        return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型