每周三道题
『每周三道题』是计蒜客信息学推出的周更栏目。每周,在我们都会在公众号上都会发布由简到难,共三道信息学题目,并于次日公布题解。欢迎各位同学积极踊跃地参与解题哟!
题解
用结构体表示一个人,自定义排序,先比较性别,如果两个人性别不同,男生在前,两个人性别相同的时候,对于男生,身高低的在前,对于女生,身高高的在前。最后依次看排序后的结果,输出每个人的身高,四舍五入保留两位小数。
标程
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct people {
int gender; // 性别
double h; // 身高
};
bool cmp(people a, people b) {
if (a.gender != b.gender) { // 性别不同,男生在前
return a.gender < b.gender;
}
if (a.gender == 1) { // 都是男生,身高低的在前
return a.h < b.h;
} else { // 都是女生,身高高的在前
return a.h > b.h;
}
}
people p[45];
string s;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> s >> p[i].h;
if (s == 'male') {
p[i].gender = 1; // 用整数表示性别,1 表示男生,2 表示女生,这样方便比较
} else {
p[i].gender = 2;
}
}
sort(p, p + n, cmp); // 排序
for (int i = 0; i < n; i++) {
printf('%.2f ', p[i].h); // 四舍五入保留两位小数输出
}
cout << endl;
return 0;
}
联系客服