前言

传送门

正文

思路:

题意:
给出n个考生的id号,德分,才分 ,及格线L,优秀线H,对这n个考生分类
第五类:考生的德分或者才分低于L
第一类:考生的德分,才分均不低于H
第二类:考生的德分不低于H,但才分低于H
第三类:考生的德分和才分低于H,但德分不低于才分
第四类:剩下的就是第四类排序规则:
首先按照类别从小到大排序
类别相同的按照总分(德分+才分)降序排序
总分相同的则按照德分降序排序
德分相同的则按照id号升序排序 构造考生结构体,从题意来看,结构体中应该包含的信息有id,德分,才分,总分,类别。
这里注意方法一直接使用cin和cout会导致超时,因此需要将输入输出改为scanf和printf,
同时在cmp排序规则中使用strcmp来比较id号的大小

参考题解
方法一(超时)

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
/*
给出n个考生的id号,德分,才分 ,及格线L,优秀线H,对这n个考生分类
第五类:考生的德分或者才分低于L
第一类:考生的德分,才分均不低于H
第二类:考生的德分不低于H,但才分低于H
第三类:考生的德分和才分低于H,但德分不低于才分
第四类:剩下的就是第四类排序规则:
首先按照类别从小到大排序
类别相同的按照总分(德分+才分)降序排序
总分相同的则按照德分降序排序
德分相同的则按照id号升序排序 构造考生结构体,从题意来看,结构体中
应该包含的信息有id,德分,才分,总分,
类别。
*/
struct student{string id;int virtue,talent,sum;int flag;
}stu[100001];
//排序规则
bool cmp(student a,student b){if(a.flag!=b.flag)return a.flag<b.flag;else if(a.sum!=b.sum)return a.sum>b.sum;else if(a.virtue!=b.virtue)return a.virtue>b.virtue;else return a.id<b.id;
}
int main(){int n,L,H,count;cin>>n>>L>>H;count=n;getchar();//读取缓冲区中的换行符,以免影响下一次读入id号 for(int i=0;i<n;i++){cin>>stu[i].id>>stu[i].virtue>>stu[i].talent;stu[i].sum=stu[i].virtue+stu[i].talent;if(stu[i].virtue<L||stu[i].talent<L){stu[i].flag=5;count--;//总共及格人数 } else if(stu[i].virtue>=H&&stu[i].talent>=H) stu[i].flag=1;else if(stu[i].virtue>=H&&stu[i].talent<H) stu[i].flag=2;else if(stu[i].virtue<H&&stu[i].talent<H&&stu[i].virtue>=stu[i].talent)stu[i].flag=3; else stu[i].flag=4;getchar();//读取缓冲区中的换行符,以免影响下一次读入id号 }cout<<count<<endl;sort(stu,stu+n,cmp);//排序for(int i=0;i<count;i++){cout<<stu[i].id<<" "<<stu[i].virtue<<" "<<stu[i].talent<<endl; } return 0;
}

法二(由于法一会超时,因此将输入和输出改为scanf和printf,为了便于printf输出,将string类型改为char数组类型)

#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
/*
给出n个考生的id号,德分,才分 ,及格线L,优秀线H,对这n个考生分类
第五类:考生的德分或者才分低于L
第一类:考生的德分,才分均不低于H
第二类:考生的德分不低于H,但才分低于H
第三类:考生的德分和才分低于H,但德分不低于才分
第四类:剩下的就是第四类排序规则:
首先按照类别从小到大排序
类别相同的按照总分(德分+才分)降序排序
总分相同的则按照德分降序排序
德分相同的则按照id号升序排序 构造考生结构体,从题意来看,结构体中
应该包含的信息有id,德分,才分,总分,
类别。
*/struct student{char id[10];int virtue,talent,sum;int flag;
}stu[100001];
//排序规则
bool cmp(student a,student b){if(a.flag!=b.flag)return a.flag<b.flag;else if(a.sum!=b.sum)return a.sum>b.sum;else if(a.virtue!=b.virtue)return a.virtue>b.virtue;else return strcmp(a.id,b.id)<0;
}
int main(){int n,L,H,count;//cin>>n>>L>>H;scanf("%d %d %d",&n,&L,&H);count=n;//getchar();//读取缓冲区中的换行符,以免影响下一次读入id号 for(int i=0;i<n;i++){//cin>>stu[i].id>>stu[i].virtue>>stu[i].talent;scanf("%s %d %d",stu[i].id,&stu[i].virtue,&stu[i].talent); stu[i].sum=stu[i].virtue+stu[i].talent;if(stu[i].virtue<L||stu[i].talent<L){stu[i].flag=5;count--;//总共及格人数 } else if(stu[i].virtue>=H&&stu[i].talent>=H) stu[i].flag=1;else if(stu[i].virtue>=H&&stu[i].talent<H) stu[i].flag=2;else if(stu[i].virtue<H&&stu[i].talent<H&&stu[i].virtue>=stu[i].talent)stu[i].flag=3; else stu[i].flag=4;//getchar();//读取缓冲区中的换行符,以免影响下一次读入id号 }//cout<<count<<endl;printf("%d\n",count);sort(stu,stu+n,cmp);for(int i=0;i<count;i++){//cout<<stu[i].id<<" "<<stu[i].virtue<<" "<<stu[i].talent<<endl; //printf只能输出C语言内置的数据,而string不是内置的,只是一个扩展的类, 因此不能用printf输出string printf("%s %d %d\n",stu[i].id,stu[i].virtue,stu[i].talent);} return 0;
}

PAT A1062 Talent and Virtue相关推荐

  1. PAT A1062 Talent and Virtue (25分)

    题意:德才均大于及格线low的才进行排序,排序的人按种姓分为 :) sages-nobleman-fool man-trash 对于人的类型的排序只需要在结构体中加入一个int type即可,通过这个 ...

  2. PAT-B 1015. 德才论(同PAT 1062. Talent and Virtue)

    1. 在排序的过程中,注意边界的处理(小于.小于等于) 2. 对于B-level,这题是比較麻烦一些了. 源代码: #include <cstdio> #include <vecto ...

  3. 1062 Talent and Virtue 25

    1062 Talent and Virtue 25 题目链接:A1062 Talent and Virtue 25 问题思路 我尝试了两种思路: 根据每个人的分数确定其是哪个级别(rank)的人,以总 ...

  4. PAT甲级1062 Talent and Virtue:[C++题解]结构体、哈希表

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 分4个vector,单独排序即可. ac代码 #include<bits/stdc++.h> using namespa ...

  5. 1062. Talent and Virtue (25)-PAT甲级真题

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

  6. PAT甲级1062 Talent and Virtue

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

  7. PAT 甲级 1062 Talent and Virtue

    1062 Talent and Virtue 题目大意:给出一组人数,按照要求分类再排序输出.圣人是virtue和talent都超过h的人,君子是virtue超过h并且talent位于[l,h)区间内 ...

  8. 1062. Talent and Virtue (25)

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

  9. PAT-A-1062 Talent and Virtue 【排序】

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

最新文章

  1. 字典求最小值经典案例 heapq.nsmallest() 与min()
  2. 模糊数学笔记:五、模糊聚类
  3. Android 应用程序之间内容分享详解(二)
  4. 1作业python数据类型 条件循环 列表
  5. Python2.x 和 Python3.x,如何选择?
  6. Mongodb定时备份脚本和清除脚本
  7. php里的header,PHP中常用的header头部定义有哪些
  8. validate插件使用remote做数据唯一性校验
  9. 原生input和onchange
  10. 软件项目组织与管理期末考试复习要点整理翻译
  11. c mysql学生管理系统_C++ 简单的学生信息管理系统
  12. echarts 地图增加背景图
  13. 超酷HTML5 3D动画精选
  14. 木兰编程语言,当事人最新回复来了
  15. oracle pdb监听配置,oracle 12c 监听
  16. rn 地图根据区名获取经纬度_React Native获取地理位置(获取具体城市、经纬度)...
  17. 大话系列 | 逻辑回归的入门与优化
  18. linux 协议栈学习 第八节 链路层GRO的处理
  19. Web Work 简介
  20. maven打包报内存不足,配置maven vm options

热门文章

  1. 诺基亚智能手机未来仅采用Symbian和MeeGo系统
  2. GBase 8a 支持存储过程、自定义函数的定义和使用
  3. 2db多少功率_搞懂“dB”这个单位,到底有多难?
  4. H3C MSR26-00 路由器限速
  5. 五天,上线一个自己的聚合导航,很酷!
  6. 数据库被删除了,如何恢复
  7. 关于axes(handles.axes)报错,提示未定义handles或类handles.axes
  8. 【年度总结】— 向前一步
  9. 首席新媒体运营商学院创始人黎想:裂变底层逻辑,刷屏的3个方法!
  10. 2021-04-24全国艺术设计专业院校分析——华南地区