题目
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
代码
#include <stdio.h>
#include <string.h>
int main() {
int n;
while(~scanf("%d", &n)) {
getchar();
int num[n], Temp, CHN;
char a[n][50], temp[50];
int i, j;
for(i=0; i<n; i++){
scanf("%d", &num[i]);
getchar();
gets(a[i]);
if(a[i][0]=='C'&&a[i][1]=='h'&&a[i][2]=='i'&&a[i][3]=='n'&&a[i][4]=='a'&&a[i][5]==' '){
CHN = i;
}
}
strcpy(temp , a[CHN]);
strcpy(a[CHN] , a[n-1]);
strcpy(a[n-1] , temp);
Temp = num[CHN];
num[CHN] = num[n-1];
num[n-1] = Temp;
temp[0] = '\0';
for(i=0; i<n-2; i++){
for(j=0; j<n-2-i; j++){
if( strcmp(a[j] , a[j+1])>0 ){
strcpy(temp , a[j]);
strcpy(a[j] , a[j+1]);
strcpy(a[j+1] , temp);
Temp = num[j];
num[j] = num[j+1];
num[j+1] = Temp;
}
}
}
for(i=0; i<n; i++){
printf("%d ", num[i]);
puts(a[i]);
}
}
return 0;
}