PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数
生活随笔
收集整理的這篇文章主要介紹了
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甲级1078 Hashing:[C
- 下一篇: PAT甲级1145 Hashing -