PAT Basic Level 1015. 德才论(25)
2014-03-12 18:42
330 查看
【来源】
1015. 德才论(25)
【分析】
此题本质上是一个排序问题。使用C++ STL中的sort函数并根据题意自定义compare函数即可。
在输入的时候将所有考生分成四类:“才德全尽”、“德胜才”、“才德兼亡,但德胜才”,以及剩下的达到及格线的考生。然后各自排序,依次输出即可。
需注意使用cin、cout可能会超时。
【源码】
【点评】
此题为排序题,充分理解题意后不难写出代码。
1015. 德才论(25)
【分析】
此题本质上是一个排序问题。使用C++ STL中的sort函数并根据题意自定义compare函数即可。
在输入的时候将所有考生分成四类:“才德全尽”、“德胜才”、“才德兼亡,但德胜才”,以及剩下的达到及格线的考生。然后各自排序,依次输出即可。
需注意使用cin、cout可能会超时。
【源码】
#include <cstdio> #include <vector> #include <algorithm> using namespace std; struct candidate { int id; int de; int cai; }; bool compare(candidate lhs, candidate rhs) { if ((lhs.cai + lhs.de) < (rhs.de + rhs.cai)){ return false; } else if ((lhs.cai + lhs.de) > (rhs.de + rhs.cai)){ return true; } else{ if (lhs.de < rhs.de){ return false; } else if (lhs.de > rhs.de){ return true; } else{ if (lhs.id < rhs.id){ return true; } else{ return false; } } } } int main() { int n, l, h; scanf_s("%d%d%d", &n, &l, &h); vector<candidate> class1; vector<candidate> class2; vector<candidate> class3; vector<candidate> class4; int count = 0; for (int i = 0; i < n; ++i){ candidate can; scanf_s("%d%d%d", &can.id, &can.de, &can.cai); if (can.de >= l && can.cai >= l){ ++count; if (can.de >= h && can.cai >= h){ class1.push_back(can); } else if (can.de >= h && can.cai < h){ class2.push_back(can); } else if (can.de < h && can.cai < h && can.de >= can.cai){ class3.push_back(can); } else{ class4.push_back(can); } } } printf("%d\n", count); sort(class1.begin(), class1.end(), compare); sort(class2.begin(), class2.end(), compare); sort(class3.begin(), class3.end(), compare); sort(class4.begin(), class4.end(), compare); vector<candidate>::const_iterator cit1; for (cit1 = class1.begin(); cit1 != class1.end(); ++cit1){ printf("%d %d %d\n", cit1->id, cit1->de, cit1->cai); } vector<candidate>::const_iterator cit2; for (cit2 = class2.begin(); cit2 != class2.end(); ++cit2){ printf("%d %d %d\n", cit2->id, cit2->de, cit2->cai); } vector<candidate>::const_iterator cit3; for (cit3 = class3.begin(); cit3 != class3.end(); ++cit3){ printf("%d %d %d\n", cit3->id, cit3->de, cit3->cai); } vector<candidate>::const_iterator cit4; for (cit4 = class4.begin(); cit4 != class4.end(); ++cit4){ printf("%d %d %d\n", cit4->id, cit4->de, cit4->cai); } return 0; }
【点评】
此题为排序题,充分理解题意后不难写出代码。
相关文章推荐
- 文件遍历排序函数
- SQLSERVER的排序问题结果不是想要的
- SQL学习笔记四 聚合函数、排序方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- SQL进行排序、分组、统计的10个新技巧分享
- SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)
- PHP下对数组进行排序的函数
- PHP 多维数组排序实现代码
- 修改正确的asp冒泡排序
- asp下几种常用排序算法
- JavaScript中数组的排序、乱序和搜索实现代码
- Oracle 中文字段进行排序的sql语句
- PHP数组排序函数合集 以及它们之间的联系分析
- Array 重排序方法和操作方法的简单实例
- MYSQL 关于两个经纬度之间的距离由近及远排序
- 发个自己写的表格操作类(添加,删除,排序,上移,下移)
- 一个特殊的排序需求的javascript实现代码
- javascript-表格排序(降序/反序)实现介绍(附图)
- JavaScript Table排序 2.0 (更新)
- 数据库中排序的对比及使用条件详解