生日
*排序输出名字
有n行,
即n个生日从大到小同学的姓名。***(如果有两个同学生日相同,输入靠后的同学先输出)***
输入
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
输出
Luowen
Yangchu
Qiujingya
运用结构体
c语言
#include<stdio.h>
#define N 110 //人数
struct student{ //用结构体存他们的信息
char s[100];
int y;
int m;
int d;
}str[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s%d%d%d",&str[i].s ,&str[i].y ,&str[i].m ,&str[i].d );
}
for(int i=0;i<n-1;i++) **//从出生早 到 晚 排列**
{
for(int j=i+1;j<n;j++)
{
if(str[i].y >str[j].y ) //这里比较年月日难需要考虑
{
str[110]=str[i],str[i]=str[j],str[j]=str[110];
}
else if(str[i].y ==str[j].y )
{
if(str[i].m >str[j].m )
str[110]=str[i],str[i]=str[j],str[j]=str[110];
else if(str[i].m == str[j].m )
{
if(str[i].d >=str[j].d ) //这是年月日相同 输出后面的
str[110]=str[i],str[i]=str[j],str[j]=str[110];
}
}
}
}
for(int i=0;i<n;i++)
{
printf("%s",str[i].s );
printf("\n");
}
return 0;
}
说明当年不一样时;直接换,相同时else if (相同)
然后考虑 月 不一样时 直接换,相同时else if(相同)
然后日 不一样就直接换了
用c++中的sort排序
#include <iostream>
#include<algorithm> //这是他的头文件
#define N 105
using namespace std;
struct student{
string name;
int year,month,day;
int ji;//用来记录结构体是第几个输入的
}stu[N];
bool cmp(student a,student b)
{
if(a.year != b.year ) return a.year < b.year ;
if(a.month != b.month ) return a.month < b.month ;
if(a.day != b.day ) return a.day < b.day ;
return a.ji > b.ji ;//当遇到相同年月日时输出后面一个
//在直接排序中用后面一个替换掉前面一个
//在这是输出ji 比较大的那个
//else if(a.day ==b.day ) return b.day >a.day ;
}
int main()
{
int n;
cin >>n;
for(int i=0;i<n;i++)
{
cin >>stu[i].name >>stu[i].year >>stu[i].month >>stu[i].day ;
stu[i].ji=i+1;
}
sort(stu,stu+n,cmp);
for(int i=0;i<n;i++)
cout <<stu[i].name<<endl ;
return 0;
}