PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数
文章目录
- 题目分析
- 题目链接
题目分析
分析:
首先一个学生有id,另外有4个成绩:编程成绩、期中成绩、期末成绩、总评成绩。现有3个成绩单:编程成绩、期中成绩、期末成绩,让计算总评成绩,并排序输出。
解答:使用string 到结构体的映射(建立hash表),<学号,学生结构体>,把所有信息存入结构体。
这里使用到结构体里面写函数,结构体里面写默认构造函数、结构体里面重载运算符等知识。(备注:和C++类很像)
//学生结构体
struct Student{string id;int program,mid,final;int grade;//默认构造函数:所有成绩初始化为-1Student(): program(-1),mid(-1),final(-1),grade(-1) {}//计算总评成绩void calc(){if(final > mid) grade = final;//round四舍五入函数else grade = round(mid * 0.4 + final * 0.6);}//重载小于号:排序bool operator<(const Student& a)const{if(grade !=a.grade) return grade > a.grade;else return id< a.id;}
};
然后遍历hash表,找出符合条件(及格)的学生结构体放入vector,对vector排序输出即可。
AC代码
#include<bits/stdc++.h>
using namespace std;const int N =1e5+10;
int p ,m , n;struct Student{string id;int program,mid,final;int grade;//构造函数Student(): program(-1),mid(-1),final(-1),grade(-1) {}void calc(){if(final > mid) grade = final;else grade = round(mid * 0.4 + final * 0.6);}bool operator<(const Student& a)const{if(grade !=a.grade) return grade > a.grade;else return id< a.id;}
};unordered_map<string,Student> mp;int main(){cin >> p >> m >> n;string id;int grade;for(int i = 0; i<p ; i++){cin >> id>> grade;mp[id].id = id,mp[id].program = grade;}for(int i = 0; i<m ; i++){cin >> id>> grade;mp[id].id = id,mp[id].mid = grade;}for(int i = 0; i<n ; i++){cin >> id>> grade;mp[id].id = id,mp[id].final = grade;}vector<Student> students;for(auto item : mp){auto stu = item.second;stu.calc(); //计算总成绩if(stu.program >= 200 && stu.grade >= 60)students.push_back(stu);}sort(students.begin(),students.end());for(auto s : students)printf("%s %d %d %d %d\n", s.id.c_str(), s.program, s.mid,s.final,s.grade);}
题目链接
PAT甲级1137 Final Grading
https://www.acwing.com/problem/content/1632/
PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数相关推荐
- PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...
- PAT甲级1153 Decode Registration Card of PAT :[C++题解]结构体、哈希表、排序、类似数据库查询题、好题
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 本题是三种不同的询问,难道要写三个结构体?想了想,就写了一个结构体,参赛人结构体,内容包括考号id和成绩grade,然后开结构体数组 ...
- PAT甲级1062 Talent and Virtue:[C++题解]结构体、哈希表
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 分4个vector,单独排序即可. ac代码 #include<bits/stdc++.h> using namespa ...
- PAT甲级1029 Median:[C++题解]贪心、二路归并
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 如果直接排序,时间复杂度是O(nlogn),n=2∗105O(nlogn),\ n=2*10^5O(nlogn), n=2∗105会 ...
- PAT甲级1070 Mooncake:[C++题解]贪心
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 对单件从高到低排序. 需要注意的是总需要量d设成double,不要设成int. ac代码 #include<bits/stdc ...
- PAT甲级1008 Elevator:[C++题解]模拟
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:统计上升次数.下降次数:停留次数就是n.然后算数即可. ac代码 #include<bits/stdc++.h> usin ...
- PAT甲级1077 Kuchiguse:[C++题解]字符串、最长公共后缀
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 读入n个字符串s[n],以s[0]为基础找公共后缀.枚举后缀的长度,内层循环遍历其他字符串,判断是否后缀相等. 使用子串的函数sub ...
- PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...
- PAT甲级1003 Emergency:[C++题解]dijkstra求最短路、最短路条数
文章目录 题目分析 题目链接 题目分析 分析:求单源最短路,使用dijkstra()算法. 最短路的条数,和最短路中 人数最多的一条,输出最多人数. 本题点比较少,使用邻接矩阵d[N][N]来存. a ...
最新文章
- laravel 目录
- Axis,axis2,Xfire以及cxf对比 (转)
- 阿里DataV可视化大屏基本操作
- 2019年最好的前端进阶课,合同保障不过20w年薪全额退款!
- 永恒之塔 java_AionChs
- 总结目前做得好的新实体店,大致有如下几点
- 帆软报表跨域之插件开发中Controller中定义的方法实现CROS的GET跨域,且请求头带自定义属性
- Web服务器程序解释请求消息并作出响应
- drupal7 payment module:把支付form元素注入到form中
- 32. Magento log()方法
- paip.php调试脱离IDE VC59
- php_redis配置安装php_redis-5.1.1-7.4-nts-vc15-x64.zip
- 3. Spring Boot 从零开始学习
- 【合同】产品设计:ID与MD设计合同模板
- CSS 动画 animation
- 麒麟芯片鸿蒙芯片高通骁龙,麒麟和骁龙两款处理器,选哪一款比较好,看完这三点你就明白了...
- 淘集集报活动需要隐身上架商品的链接吗?
- CTF-WEB总结(四-题目来源i春秋)
- 《算法竞赛入门经典(第2版)》——学习记录
- Matlab实现求解乘法逆元实验