80分,求助

P1104 生日

hcy0919 @ 2025-01-10 20:43:02

为了方便大佬们观看我还把注释标了上去。

#include <bits/stdc++.h>
using namespace std;
int n;
struct sr{
    string s;
    int y, m, d;
}p[105];
bool cmp(sr x1, sr x2){
    if (x1.y != x2.y){//年 
        return x1.y<x2.y;//年份更小的排前面 
    }
    else{
        if (x1.m != x2.m){//月 
            return x1.m<x2.m;//月份更小的排前面 
        }
        else{
            if (x1.d != x2.d){//日 
                return x1.d<x2.d;//日更小的排前面 
            }
        }
    }
}
int main(){
    cin>>n;
    for (int i=1; i<=n; i++){
        cin>>p[i].s;//输入名字 
        cin>>p[i].y>>p[i].m>>p[i].d;//输入生日 
    }
    sort(p+1, p+n+1, cmp);//排序 
    for (int i=1; i<=n; i++){
        cout<<p[i].s<<endl;//输出名字 
    }
    return 0;
}

by hardme @ 2025-01-10 20:54:30

#include <bits/stdc++.h>
using namespace std;
int n;
struct sr{
    string s;
    int y, m, d;
}p[105];
bool cmp(sr x1, sr x2){
    if (x1.y != x2.y){//年 
        return x1.y<x2.y;//年份更小的排前面 
    }
    else{
        if (x1.m != x2.m){//月 
            return x1.m<x2.m;//月份更小的排前面 
        }
        else{
            if (x1.d != x2.d){//日 
                return x1.d<x2.d;//日更小的排前面 
            }
            return 0;
        }
    }
}
int main(){
    cin>>n;
    for (int i=1; i<=n; i++){
        cin>>p[i].s;//输入名字 
        cin>>p[i].y>>p[i].m>>p[i].d;//输入生日 
    }
    sort(p+1, p+n+1, cmp);//排序 
    for (int i=1; i<=n; i++){
        cout<<p[i].s<<endl;//输出名字 
    }
    return 0;
}

by baiguifan_ @ 2025-01-10 20:54:46

虽然不知道是不是这个问题,但是题面说生日相同的同学输入靠后的先输出,所以应该再记录一下输入顺序吧


by hardme @ 2025-01-10 20:54:56

生日相等的要特判。


|