问题 AL: 健康体检
时间限制: 1.000 Sec 内存限制: 128 MB
提交 状态
题目描述
健康体检是用医学手段和方法进行身体检查,这里包括临床各科室的基本检查,包括超声、心电、放射等医疗设备检查,还包括围绕人体的血液、尿便的化验检查。
健康体检是以健康为中心的身体检查。一般医学家认为健康体检是指在身体尚未出现明显疾病时,对身体进行的全面检查。
现在有一群人登记了要进行健康体检,尊老爱幼是中华民族的传统美德,现在让你将登记的人按照以下原则排出体检的先后顺序。
(1)老年人(年龄>=60)比非老年人优先;
(2)老年人按年龄从大到小的顺序体检,年龄相同的按登记的先后顺序排序;
(3)非老年人按登记的先后顺序体检;
输入
第1行,一个不超过100的正整数n,表示体检的人数;
接下来有n行,按照体检登记的先后顺序,每行输入一个人的信息,包括:一个长度小于10的字符串表示体检人的ID,一个整数表示病人的年龄,中间用空格隔开。
输出
按排好的体检顺序输出体检人的ID
样例输入 Copy
5
021075 40
004003 15
010158 67
021033 75
102012 30
样例输出 Copy
021033
010158
021075
004003
102012
#include<bits/stdc++.h>
using namespace std;
typedef struct bin
{
char ti[10];
int rei;
} bi;
bool cmp( bi p,bi q)
{
if (p.rei >= 60 && q.rei < 60) {
return true;
} else if (p.rei< 60 && q.rei>= 60) {
return false;
}
else
{
if(p.rei == q.rei){
return p.ti < q.ti;
}
else{
if(p.rei > q.rei)
{
p.rei > q.rei;
}
}
}
}//这段代码是一个用于比较两个对象的函数cmp。函数接受两个参数p和q,这两个参数的类型是bi。函数返回一个bool类型的值。
//函数的主要功能是根据一定的条件比较两个对象p和q的属性,并返回比较结果。具体的比较逻辑如下:
//如果p的rei属性大于等于60且q的rei属性小于60,则返回true。
//如果p的rei属性小于60且q的rei属性大于等于60,则返回false。
//如果以上两个条件都不满足,则进入else语句块。 a. 如果p的rei属性等于q的rei属性,则比较p和q的ti属性
//,如果p的ti属性小于q的ti属性,则返回true,否则返回false。 b. 如果p的rei属性大于q的rei属性,则返回true,否则返回false。
int main(){
int a,b,c,i;
cin >> a;
vector <bin> bi(a);
for (int i = 0; i < a; i++) {
cin >> bi[i].ti >> bi[i].rei;
}
sort(bi.begin(),bi.end(),cmp);
for(const auto& bin : bi){
cout << bin.ti<<endl;
}
//这段代码是使用C++的范围for循环来遍历一个名为bin的容器(例如vector、array等)中的元素。
//每次循环迭代,bin都会被绑定bi中的一个元素上。
//在这段代码中,使用了const auto& bin来声明循环变量person。其中,const表示bin是一个常量,不可修改;
//auto表示编译器会自动推导bin的类型;&表示bin是一个引用,可以避免拷贝开销。
//在循环体内部,cout << bin.ti << endl;用于输出bin的ti属性值,并换行。这里假设bin是一个自定义的类或结构体,
//其中包含一个名为ti的成员变量。
return 0;
}