问题标题: 酷町堂:5520

0
0
已解决
武建豪
武建豪
中级天翼
中级天翼

...每日一题

5520   桃园结义经验值:800

题目描述 Description

东汉末年,刘备结识了关羽和张飞,他们决定一起匡扶汉室。于是在桃园结义,此时需要知道谁是大哥,要按照年龄排序。这个问题很简单。现在假设不止3个人,而是有n个人,请你帮这n个人按年龄从大到小排序。

输入描述 Input Description

第一行,一个整数n,表示人数
接下来n行,每行4个部分,name y m d,表示这个人的姓名和出生的年月日

输出描述 Output Description

把这n个人按照年龄从大到小排序,如果年龄一样,按照输入的顺序,先输入的后输出

样例输入 Sample Input

3 LiuBei 2020 1 1 GuanYu 2020 1 2 ZhangFei 2020 1 3

样例输出 Sample Output

LiuBei GuanYu ZhangFei

数据范围及提示 Data Size & Hint

n<=10000

 

武建豪在2020-10-10 21:03:34追加了内容

瞎写的,找错

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct STU{
    string name;
    int a,y,m,d;
}s[100001];
bool cmp(STU x,STU y){
    if(x.a!=y.a) return x.a>y.a;
    return x.name<y.name;
    return x.y<y.y;
    return x.m<y.m;
    return x.d<y.d;
}
int main(){
    long long int n,i;
    cin>>n;
    for( i=1;i<=n;i++){
        cin>>s[i].name>>s[i].a;
    }
    sort(s+1,s+n+1,cmp);
    for( i=1;i<=n;i++){
        cout<<s[i].name<<" "<<s[i].a<<endl;
    }
    return 0;
}

武建豪在2020-10-10 21:14:25追加了内容

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

武建豪在2020-10-10 21:46:54追加了内容

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct STU{
    string name;
    int a,y,m,d;
} s[10010];
bool cmp(STU x,STU y){
    if(x.y!=y.y) return x.y<y.y;
    if(x.m!=y.m) return x.m<y.m;
    if(x.d!=y.d) return x.d<y.d;
    return x.d>y.d;
}
int n;
int main(){
    cin>>n;
    long long i;
    for( i=1;i<=n;i++){
        cin>>s[i].y>>s[i].m>>s[i].d;
    }
    sort(s+1,s+n+1,cmp);
    for( i=1;i<=n;i++){
        cout<<s[i].name<<" ";
    }
    return 0;
}@沙宸安

武建豪在2020-10-10 21:57:39追加了内容

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct STU{
    string name;
    int a,y,m,d;
} s[10010];
bool cmp(STU x,STU y){
    if(x.y!=y.y) return x.y<y.y;
    if(x.m!=y.m) return x.m<y.m;
    if(x.d!=y.d) return x.d<y.d;
    return x.d>y.d;
}
int n;
int main(){
    cin>>n;
    long long i;
    for( i=1;i<=n;i++){
        cin>>s[i].y>>s[i].m>>s[i].d>>s[i].name;
    }
    sort(s+1,s+n+1,cmp);
    for( i=1;i<=n;i++){
        cout<<s[i].name<<" ";
    }
    return 0;
}

武建豪在2020-10-10 22:08:50追加了内容

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

@沙宸安

武建豪在2020-10-11 09:50:08追加了内容

看我千斤顶!

武建豪在2020-10-11 10:53:10追加了内容

武建豪在2020-10-11 10:55:55追加了内容

tm就是不对

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct STU{
    string name;
    int a,y,m,d,i;
    for(int i=1;i<=n;i++){
        s[i].id=i;
    }
} s[10010];
bool cmp(STU x,STU y){
    if(x.y!=y.y) return x.y<y.y;
    if(x.m!=y.m) return x.m<y.m;
    if(x.d!=y.d) return x.d<y.d;
    return x.d>y.d;
    return x.id>y.id;
}

@赵逸凡 @李泽远
@侯平仄

@王子逸 

@王子健
 

 

武建豪在2020-10-11 10:56:20追加了内容

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

武建豪在2020-10-11 11:36:42追加了内容

样例过了,但是提交0分

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

@沙宸安

 

武建豪在2020-10-11 13:27:26追加了内容


0
已采纳
沙宸安
沙宸安
高级启示者
高级启示者

你的s[i].id是没有用的,删掉也不会影响结果。

0
刘英杰
刘英杰
新手天翼
新手天翼

sort特排

先按年份从小到大排

然后按月份从小到大排

最后按天从小到大排

0
胡家翊
胡家翊
高级守护
高级守护

排序有问题

先判断if(x.y!=y.y)...

以此类推

0
沙宸安
沙宸安
高级启示者
高级启示者

cmp有问题

return x.name<y.name; 应该不需要,

否则你下面4行代码等于没运行。

 

0
沙宸安
沙宸安
高级启示者
高级启示者

我整理了一下:

1、输入有问题

2、输出有问题,应空格不是换行

3、cmp return x.name<y.name;是多余语句

4、排反了,把 > 改成 <

5、还要考虑一下出生同年同月同日的情况 return x.d>y.d;

0
沙宸安
沙宸安
高级启示者
高级启示者

我整理了一下:

1、输入有问题

2、cmp return x.name<y.name;是多余语句

3、排反了,把 > 改成 <

4、还要考虑一下出生同年同月同日的情况 return x.d>y.d;

沙宸安在2020-10-10 21:49:45追加了内容

还是不过吗?

沙宸安在2020-10-10 21:59:05追加了内容

你没输入s[i].name啊!

沙宸安在2020-10-10 22:03:23追加了内容

没人了?

0
沙宸安
沙宸安
高级启示者
高级启示者

。。。可是我真的找不出来什么错了

0
蔡乐毅
蔡乐毅
高级光能
高级光能

在struct中定义一个id记录顺序

for(……){
……

s[i].id=i;
}

在cmp的最后排return x.id<y.id;

蔡乐毅在2020-10-11 09:59:46追加了内容

呸 return x.id>y.id;

我要回答