问题标题: 酷町堂:4533

0
0
已解决
邓涵睿
邓涵睿
中级天翼
中级天翼

年龄排序

题目详情

题目描述 Description

输入n个人的姓名和出生日期(格式 :xx  xx  xx),请按照他们年龄(从出生至今经过多长时间)从小到大排序,年龄相同的按照输入的顺序(靠前的先输出)来排序。

输入描述 Input Description

输入n+1行,
第一行,一个正整数n;
接下来n行,每行输入一个人的姓名、出生日期(年、月、日),用空格隔开。

输出描述 Output Description

输出排好序的n个人姓名,用空格隔开

样例输入 Sample Input

2 xiaohong 1997 09 20 xiaoming 1998 08 01

样例输出 Sample Output

xiaoming xiaohong

数据范围及提示 Data Size & Hint

1<n<=1000,出生日期1990-2019

@李显晨 

帮我一下,200豆

邓涵睿在2020-11-05 17:41:13追加了内容
#include<iostream> 
#include<algorithm>
#include<string>
using namespace std;
struct d{
	string name;
	int A,B,C;
}a[60];
bool cmp(d x,d y){
	if(x.A!=y.A) return x.A<y.A;
	if(x.B!=y.B) return x.B<y.B;
	if(x.C!=y.C) return x.C<y.C;
	return x>y;
}
int main(){
	int n;
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i].name>>a[i].A>>a[i].B>>a[i].C;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
		cout<<a[i].name;
    }
    return 0;
}

 


0
已采纳
李显晨
李显晨
中级启示者
中级启示者
#include<iostream> 
#include<algorithm>
#include<string>
using namespace std;
struct d{
    string name;
    int A,B,C,pos;
}a[1010];
bool cmp(d x,d y){
    if(x.A!=y.A) return x.A>y.A;
    if(x.B!=y.B) return x.B>y.B;
    if(x.C!=y.C) return x.C>y.C;
    return x.pos<y.pos;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].A>>a[i].B>>a[i].C;
        a[i].pos=i;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].name<<" ";
    }
    return 0;
}

 

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

一个结构体排序

struct node{
   string name;
   int y,m,d;
}

此外还要定义一个id(输入顺序)

用一个sort就完事了

cmp函数:

bool cmp(node o,node p){
   if(o.y!=p.y)   return o.y>p.y;
   if(o.m!=p.m)   return o.m>p.m;
   if(o.d!=p.d)   return o.d>p.d;
   return o.id<p.id;
}

出生越晚,年龄越小

我要回答