题目描述
cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序。但cjf君最近作业很多,没有时间,所以请你帮她排序。
输入格式
有2行,
第1行为OI组总人数n;
第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d。
输出格式
有n行,
即n个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)
输入输出样例
输入 #1
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
输出 #1
Luowen
Yangchu
Qiujingya
说明/提示
数据规模
1<n<100
length(s)<20
#include<stdio.h>
#include<string.h>
struct xin
{
char name[20];
int nian,yue,ri;
};
int main ()
{
int n,i,j=0,t,k=0;
char dai[20];
struct xin xi[101];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d %d",xi[i].name,&xi[i].nian,&xi[i].yue,&xi[i].ri);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(xi[i].nian>xi[j].nian)
{
strcpy(dai,xi[i].name);
strcpy(xi[i].name,xi[j].name);
strcpy(xi[j].name,dai);
t=xi[i].nian;
xi[i].nian=xi[j].nian;
xi[j].nian=t;
t=xi[i].yue;
xi[i].yue=xi[j].yue;
xi[j].yue=t;
t=xi[i].ri;
xi[i].ri=xi[j].ri;
xi[j].ri=t;
}
else if(xi[i].nian==xi[j].nian)
{
if(xi[i].yue>xi[j].yue)
{
strcpy(dai,xi[i].name);
strcpy(xi[i].name,xi[j].name);
strcpy(xi[j].name,dai);
t=xi[i].yue;
xi[i].yue=xi[j].yue;
xi[j].yue=t;
t=xi[i].ri;
xi[i].ri=xi[j].ri;
xi[j].ri=t;
}
else if(xi[i].yue==xi[j].yue)
{
if(xi[i].ri>=xi[j].ri)
{
strcpy(dai,xi[i].name);
strcpy(xi[i].name,xi[j].name);
strcpy(xi[j].name,dai);
t=xi[i].ri;
xi[i].ri=xi[j].ri;
xi[j].ri=t;
}
}
}
}
}
for(i=0;i<n;i++)
{
printf("%s\n",xi[i].name);
}
}