PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
分析:
首先一個(gè)學(xué)生有id,另外有4個(gè)成績:編程成績、期中成績、期末成績、總評(píng)成績。現(xiàn)有3個(gè)成績單:編程成績、期中成績、期末成績,讓計(jì)算總評(píng)成績,并排序輸出。
解答:使用string 到結(jié)構(gòu)體的映射(建立hash表),<學(xué)號(hào),學(xué)生結(jié)構(gòu)體>,把所有信息存入結(jié)構(gòu)體。
這里使用到結(jié)構(gòu)體里面寫函數(shù),結(jié)構(gòu)體里面寫默認(rèn)構(gòu)造函數(shù)、結(jié)構(gòu)體里面重載運(yùn)算符等知識(shí)。(備注:和C++類很像)
//學(xué)生結(jié)構(gòu)體 struct Student{string id;int program,mid,final;int grade;//默認(rèn)構(gòu)造函數(shù):所有成績初始化為-1Student(): program(-1),mid(-1),final(-1),grade(-1) {}//計(jì)算總評(píng)成績void calc(){if(final > mid) grade = final;//round四舍五入函數(shù)else grade = round(mid * 0.4 + final * 0.6);}//重載小于號(hào):排序bool operator<(const Student& a)const{if(grade !=a.grade) return grade > a.grade;else return id< a.id;} };然后遍歷hash表,找出符合條件(及格)的學(xué)生結(jié)構(gòu)體放入vector,對(duì)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;//構(gòu)造函數(shù)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(); //計(jì)算總成績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甲級(jí)1137 Final Grading
https://www.acwing.com/problem/content/1632/
總結(jié)
以上是生活随笔為你收集整理的PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1078 Hashing:[C
- 下一篇: PAT甲级1145 Hashing -