#include<bits/stdc++.h> using namespace std;

struct patient { string id; int age; int ord; };

bool cmp(patient a, patient b) { if(a.age >= 60 && b.age >= 60) { if(a.age != b.age) return a.age > b.age; else return a.ord < b.ord; } else if(a.age >= 60 && b.age < 60) { return true; } else if(a.age < 60 && b.age >= 60) { return false; } else { return a.ord < b.ord; } }

int main() { int n; cin >> n; vector p(n); for(int i = 0; i < n; i++) { cin >> p[i].id >> p[i].age; p[i].ord = i; } sort(p.begin(), p.end(), cmp); for(int i = 0; i < n; i++) { cout << p[i].id << endl; } return 0; }

这段代码可能出现答案错误的原因是在排序函数cmp的实现上存在问题。根据题目要求,首先需要将年龄大于等于60岁的患者排在前面,其次按照年龄从大到小排序,最后按照输入顺序排列。由于题目没有明确说明年龄相同的情况下如何排序,所以可以按照输入顺序排列。

修正后的代码使用了vector容器来存储患者信息,并且在排序函数中对年龄相同的情况进行了处理。同时,将sort函数的参数改为了p.begin()和p.end(),保证了排序的正确性。

C++ 患者排序算法:优化代码,解决错误答案问题

原文地址: https://www.cveoy.top/t/topic/qCAT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录