pat 乙级 1015 德才论(C++)

题目

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”

现给出一批考生的德才分数,请根据司马光的理论给出录取排名。

输入格式:

输入第一行给出 3 个正整数,分别为:N(≤10​5),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。

随后 N 行,每行给出一位考生的信息,包括:

准考证号 德分 才分

其中准考证号为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。

输出格式:

输出第一行首先给出达到最低分数线的考生人数 M,随后 M 行,每行按照输入格式输出一位考生的信息。考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

输入样例:

14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60

输出样例:

12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90

分析

解法1

  • 考生信息可用结构体存储,成员包括准考证号、德分、才分、总分
  • 需要输出的有4类考生。
  • 第一类,德分、才分≥H;
  • 第二类,德分≥H,才分<H;
  • 第三类,L≤德分、才分<H且德分≥才分;
  • 第四类,L≤德分<H,才分≥H或者L≤才分<H。
  • 可以使用4个数组分别存储以上四类,然后排序,然后合并输出即可。

解法2

  • 考生信息可用结构体存储,成员包括准考证号、德分、才分、总分、类型。
  • 使用结构体数组来存储N个考生信息,然后使用sort函数,按照题目要求排序。
  • 然后按照类型分别输出四类考生信息。

AC代码

解法1代码

#include<iostream>
#include<algorithm>
using namespace std;
struct info
{int id,morality,talent,total;
};
bool comp(info a,info b)
{if(a.total!=b.total) return a.total>b.total;if(a.morality!=b.morality) return a.morality>b.morality;return a.id<b.id;
}
int main()
{int i,j,N,L,H,M=0;cin>>N>>L>>H;info stu1[N],stu2[N],stu3[N],stu4[N];int id,morality,talent;int count1=0,count2=0,count3=0,count4=0; for(i=0;i<N;i++){stu1[i].id=0;stu1[i].morality=0;stu1[i].talent=0;stu1[i].total=0;stu2[i].id=0;stu2[i].morality=0;stu2[i].talent=0;stu2[i].total=0;stu3[i].id=0;stu3[i].morality=0;stu3[i].talent=0;stu3[i].total=0;stu4[i].id=0;stu4[i].morality=0;stu4[i].talent=0;stu4[i].total=0;} for(i=0;i<N;i++){cin>>id>>morality>>talent;if(morality>=H&&talent>=H){stu1[i].id=id;stu1[i].morality=morality;stu1[i].talent=talent;stu1[i].total=morality+talent;count1++;}else if(morality>=H&&talent>=L&&talent<H){stu2[i].id=id;stu2[i].morality=morality;stu2[i].talent=talent;stu2[i].total=morality+talent;count2++;}else if(morality>=L&&talent>=L&&talent<H&&morality<H&&morality>=talent){stu3[i].id=id;stu3[i].morality=morality;stu3[i].talent=talent;stu3[i].total=morality+talent;count3++;}else if(morality>=L&&(talent>=H||(talent>=L&&talent<H))&&morality<H){stu4[i].id=id;stu4[i].morality=morality;stu4[i].talent=talent;stu4[i].total=morality+talent;count4++;}else{}}sort(stu1,stu1+N,comp);sort(stu2,stu2+N,comp);sort(stu3,stu3+N,comp);sort(stu4,stu4+N,comp);M=count1+count2+count3+count4;cout<<M<<endl;info stu[M];for(i=0;i<count1;i++){stu[i].id=stu1[i].id;stu[i].morality=stu1[i].morality;stu[i].talent=stu1[i].talent;} for(i=count1;i<count1+count2;i++){j=i-count1;stu[i].id=stu2[j].id;stu[i].morality=stu2[j].morality;stu[i].talent=stu2[j].talent;} for(i=count1+count2;i<count1+count2+count3;i++){j=i-count1-count2; stu[i].id=stu3[j].id;stu[i].morality=stu3[j].morality;stu[i].talent=stu3[j].talent;} for(i=count1+count2+count3;i<M;i++){j=i-(count1+count2+count3); stu[i].id=stu4[j].id;stu[i].morality=stu4[j].morality;stu[i].talent=stu4[j].talent;}	for(i=0;i<M;i++){if(i!=M-1)cout<<stu[i].id<<" "<<stu[i].morality<<" "<<stu[i].talent<<endl;elsecout<<stu[i].id<<" "<<stu[i].morality<<" "<<stu[i].talent;} return 0;
}

解法2代码

#include<iostream>
#include<algorithm>
using namespace std;
struct info
{int id,morality,talent,total,type;
};
bool comp(info a,info b)
{if(a.total!=b.total) return a.total>b.total;if(a.morality!=b.morality) return a.morality>b.morality;return a.id<b.id;
}
int main()
{int i,N,L,H,M=0;cin>>N>>L>>H;info stu[N];for(i=0;i<N;i++){cin>>stu[i].id>>stu[i].morality>>stu[i].talent;stu[i].type=0;int morality=stu[i].morality,talent=stu[i].talent;stu[i].total=morality+talent;if(morality>=H&&talent>=H){stu[i].type=1;M++;}else if(morality>=H&&talent>=L&&talent<H){stu[i].type=2;M++;}else if(morality>=L&&talent>=L&&talent<H&&morality<H&&morality>=talent){stu[i].type=3;M++;}else if(morality>=L&&(talent>=H||(talent>=L&&talent<H))&&morality<H){stu[i].type=4;M++;}else{}}sort(stu,stu+N,comp);cout<<M<<endl;for(i=0;i<N;i++){if(stu[i].type==1){cout<<stu[i].id<<" "<<stu[i].morality<<" "<<stu[i].talent<<endl;}} for(i=0;i<N;i++){if(stu[i].type==2){cout<<stu[i].id<<" "<<stu[i].morality<<" "<<stu[i].talent<<endl;}}for(i=0;i<N;i++){if(stu[i].type==3){cout<<stu[i].id<<" "<<stu[i].morality<<" "<<stu[i].talent<<endl;}}for(i=0;i<N;i++){if(stu[i].type==4){cout<<stu[i].id<<" "<<stu[i].morality<<" "<<stu[i].talent<<endl;}}return 0;
}

总结

本题难度不大,容易出错的地方是第4类考生的确定,还有排序。

解法1实测有运行超时的风险,但可以完美输出。解法2不会超时,但是不能完美输出(末尾会多一个换行符)。

如果你有任何问题或者建议,请在评论区留言,博主每天都会逛csdn~

更多题解
pat 乙级 题解汇总(持续更新)(C++)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正斜杠/和反斜杠\的区别

近来研究源码时发现&#xff0c;常常在路径中出现正斜杠“/”和反斜杠“\”&#xff0c;之前就一直不胜其扰&#xff0c;所幸查资料把它一次弄懂&#xff0c;求个明白。在这里做个记录。 我认真搜了一下&#xff0c;发现问这个问题的人还不少&#xff0c;知乎上也有提问的。来…

如何将Java对象转换为JSON字符串

当学习如何编写基于Java的软件时&#xff0c;开发人员遇到的第一个障碍就是如何将其代码与其他软件连接。 这通常是JSON的来源。尽管您可能是Java向导&#xff0c;但JSON是另一种动物。 无论如何&#xff0c;这篇博客文章解释了完成工作所需的一切。 Java对象是数据和处理可用…

pat 乙级 1017 A除以B(C++)

题目 本题要求计算 A/B&#xff0c;其中 A 是不超过 1000 位的正整数&#xff0c;B 是 1 位正整数。你需要输出商数 Q 和余数 R&#xff0c;使得 ABQR 成立。 输入格式&#xff1a; 输入在一行中依次给出 A 和 B&#xff0c;中间以 1 空格分隔。 输出格式&#xff1a; 在一…

C++中 Vector使用方法

1. 一维vector&#xff1a; 1.1 vector 说明 vector是向量类型&#xff0c;可以容纳许多类型的数据&#xff0c;因此也被称为容器 (可以理解为动态数组&#xff0c;是封装好了的类&#xff09; 进行vector操作前应添加头文件#include <vector>1.2 vector初始化&#xf…

pat 乙级 1019 数字黑洞(C++)

题目 给定任一个各位数字不完全相同的 4 位正整数&#xff0c;如果我们先把 4 个数字按非递增排序&#xff0c;再按非递减排序&#xff0c;然后用第 1 个数字减第 2 个数字&#xff0c;将得到一个新的数字。一直重复这样做&#xff0c;我们很快会停在有“数字黑洞”之称的 617…

moxy json介绍_使用MOXy 2.5.1快速且有点脏的JSON模式生成

moxy json介绍因此&#xff0c;这些天我正在为即将推出的Oracle云服务开发新的REST API&#xff0c;因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式。 我正在使用MOXy从POJO生成JSON&#xff0c;从EclipseLink 2.5.1版本开始&#xff0c;它现在具有从bean模型生…

C++迭代器(Iterator)详解

迭代器&#xff08;Iterator&#xff09;的介绍 背景&#xff1a; 指针可以用来遍历存储空间连续的数据结构&#xff0c;但是对于存储空间费连续的&#xff0c;就需要寻找一个行为类似指针的类&#xff0c;来对非数组的数据结构进行遍历。定义&#xff1a;迭代器是一种检查容器…

用键盘怎么直接打出小于等于和大于等于

≤&#xff1a;按住Alt&#xff0c;然后再按数字键盘41436≥&#xff1a;按住Alt&#xff0c;然后再按数字键盘41437

Java中的责任链设计模式

在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 “责任链”设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c;如果处理程序无…

C++ vector 遍历修改汇总

通过迭代器、下标操作符、范围for三种方式遍历vector内部元素以及不同遍历方式修改元素。 #include<iostream> #include<vector> using namespace std; int main() {vector<int> ivec;for(int i 0; i < 10; i)ivec.push_back(i);//遍历vector元素//1: 利…

C++11 for区间遍历:vector几种遍历方式

近来&#xff0c;基本上所有现代编程语言都有一种对一个区间写for循环的便捷方式。最终&#xff0c;C也有了相同的概念&#xff1b;你可以给循环提供一个容器&#xff0c;它帮你迭代。 example: #include <iostream> #include <vector> #include <map> usi…

指针基础及实例

指针基础 指针&#xff08;变量&#xff09;是C/C支持的一种变量。指针变量的值是一个地址&#xff0c;该地址是一个16进制的数。指针变量指向该地址所对应的变量。 指针声明 //*号表示指针变量。**号表示二级指针&#xff08;指向指针的指针&#xff09;&#xff0c;只有由它…

硒测试可实现有效的测试自动化

尽管移动应用程序的市场份额有大幅增长&#xff0c;但网络应用程序仍然以大量的用户群为主导。 在部署之前&#xff0c;企业正在快速关注Web应用程序的质量。 这是测试发挥重要作用的地方。 与某些可以自动化的功能测试不同&#xff0c;UI测试仍然主要是手动过程。 但是将测试自…

C++ map用法总结(整理)

1&#xff0c;map简介 map是STL的一个关联容器&#xff0c;它提供一对一的hash。 第一个可以称为关键字(key)&#xff0c;每个关键字只能在map中出现一次&#xff1b;第二个可能称为该关键字的值(value)&#xff1b; map以模板(泛型)方式实现&#xff0c;可以存储任意类型的…

InterruptedException和中断线程的解释

如果没有将InterruptedException检查为异常&#xff0c;则可能甚至没人会注意到它–实际上&#xff0c;这些年来可以防止出现几个错误。 但是由于必须对其进行处理&#xff0c;因此许多人不正确或不加考虑地处理它。 让我们以一个线程的简单示例为例&#xff0c;该线程定期进行…

pat 乙级 1020 月饼(C++实现)

题目 月饼是中国人在中秋佳节时吃的一种传统食品&#xff0c;不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量&#xff0c;请你计算可以获得的最大收益是多少。 注意&#xff1a;销售时允许取出一部分库存。样例给出的情形是这样的&…

Python的from和import用法

import使一个变量名引用整个模块对象&#xff0c;因此必须通过模块名称来得到该模块的属性,比如我们导入一个数学计算的模块 math&#xff1a; import mathprint math.pi #导出圆周率的值>>>3.14159265359我们导入math模块&#xff0c;在python模块学习中我们会知道&a…

带有Spring Cloud Config和JHipster的Java微服务

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户&#xff1f; 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 如今&#xff0c;使用Java和Spring Boot开发微服务架构非常流行。 它绝对是Java生态系统中最…

pat 乙级 1026 程序运行时间(C++)

题目 要获得一个 C 语言程序的运行时间&#xff0c;常用的方法是调用头文件 time.h&#xff0c;其中提供了 clock() 函数&#xff0c;可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick&#xff0c;即“时钟打点”。同时还有一个常数 CLK_TC…

什么是命名空间 为什么C++需要使用命名空间

引言&#xff1a; 问题&#xff1a;学习过C&#xff0c;然后再学c的人可能会这么问&#xff0c;我#include<iostream>之后&#xff0c;不就是把头文件拉进来了吗&#xff0c;而cin cout等函数不就是iostream.h里面的函数吗&#xff0c;我使用cin cout时&#xff0c;编译器…