记录学校OJ的一道语法练习题
题目描述:
输入 n 个学生的信息,包括姓名、性别、出生年月。要求按年龄从小到大依次输出这些学生的信息。数据保证没有学生同年同月出生。
Input
第一行一个整数 n,表示学生人数,n≤100。
接下来 n 行,每一行依次输入学生的姓名、性别、出生年份、出生月份。
Output
按年龄从小到大,一行输出一个学生的原始信息。
样例
Sample Input
5
John male 1999 12
David female 1999 8
Jason male 1998 11
Jack female 1998 8
Kitty female 2000 7
Sample Output
Kitty female 2000 7
John male 1999 12
David female 1999 8
Jason male 1998 11
Jack female 1998 8
做法:
1.建立结构体把数据捆绑
2.出生年份乘以12加上出生月份来判断年龄大小减少多次判断
3.根据sum 排序然后输出
注意:结构体的排序必须重载大于号(或小于号)本题是大于号
# include <iostream>
# include <algorithm>
# include <string>
using namespace std;
const int N = 1e5 + 10;
struct Person
{
string name;
string xin;
int y;
int m;
int sum;
bool operator< (const Person &t) const
{
return sum > t.sum;
}
}p[N];
int get(Person a)
{
int res = 0;
res += (a.y) * 12 + (a.m);
return res;
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i ++)
{
cin >> p[i].name >> p[i].xin >> p[i].y >> p[i].m;
p[i].sum = get(p[i]);
}
sort(p , p + n);
for(int i = 0; i < n; i ++)
{
cout << p[i].name << ' ' << p[i].xin;
cout << p[i].y << ' ' << p[i].m;
cout << endl;
}
return 0;
}