问题标题: 酷町堂:1550

0
0
已解决
胡景波
胡景波
中级光能
中级光能

1550   祝福短信

题目描述 Description

老师想在学生过生日的时候发送祝福信息,现在想统计所有学生的生日,并按照从小到大的顺序排列,以方便老师操作。现在老师没有时间,请你编写一个程序帮他完成。

输入描述 Input Description

有2行,

第1行为学校总人数n;

第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d,每个变量用空格隔开。

输出描述 Output Description

有n行,

即n个生日从小到大同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

样例输入 Sample Input

 

3
Wangxiang 1992 4 23
Liujunyi 1993 10 13
Zhangtianyu 1991 8 1

样例输出 Sample Output

 

Zhangtianyu
Wangxiang
Linjunyi

数据范围及提示 Data Size & Hint

数据规模

1<n<100

姓名字母长度<20

#include<iostream>
#include<algorithm>
using namespace std;
struct year{
    string name;
    int year,month,day;
}a[10000];
bool cmp(year x,year y){
    if(x.year!=y.year)
        return x.year<y.year;
    if(x.month!=y.month)
        return x.month<y.month;
    if(x.day!=y.day)
        return x.day<y.day;
    return x.name>y.name;
}
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].year>>a[i].month>>a[i].day;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].name<<endl;
    }
    return 0;
}

90

90

90

90


0
已采纳
王子健
王子健
初级天翼
初级天翼

输入靠后的先输出,存储id,cmp循环内判断,如果生日都相同return x.id > y.id

0
0
胡钰妍
胡钰妍
资深光能
资深光能

头文件

  • #include<iostream>
  • #include<algorithm>
  • #include<string>
  • using namespace std;
  • struct a{

结构体

  • string l;
  • int b,c,m,n;
  • }d[10010];

函数

  • bool cmp(a x,a y)
  • {
  • if(x.b!=y.b)
  • return x.b<y.b;
  • if(x.c!=y.c)
  • return x.c<y.c;
  • if(x.m!=y.m)
  • return x.m<y.m;
  • return x.n>y.n;
  • }
  • int main()
  • {

定义

int h,i,j,k;

输入

  • cin>>h;
  • for(j=0;j<h;j++)
  • {
  • cin>>d[j].l>>d[j].b>>d[j].c>>d[j].m;
  • d[j].n=j;
  • }

排序

sort(d,d+h,cmp);

输出

  • for(j=0;j<h;j++)
  • cout<<d[j].l<<endl;

结束

return 0;

}

望采纳!!!!没豆了

我要回答