PAT甲级目录 | PAT乙级目录

题目描述

B1080 MOOC期终成绩

解题思路

可利用 map 将字符串型的学号转换为整型的序号,方便查找。输入全部成绩后,遍历每个学生同时计算最终成绩,然后将成绩合格的人加入结果数组,最后对结果数组进行排序。

对于将输出的合格的学生,如果某次考试成绩不存在,那只可能是期中考试。如果其他考试有缺考则不可能合格。所以只要将期中考成绩默认为 -1,最后可直接输出无需另外判断。

易错点

  • 最终成绩要四舍五入

也许陌生的知识点

  • if(nametoi.find(id) == nametoi.end()){ nametoi[id] = cnt++;}
    • 可利用 map 将字符串类型的 id 转换成整数序号,方便处理
    • 需要的头文件:map
  • sort(S, S + n, cmp);
    • 排序函数,实现 [first, last) 范围内的排序,可以自定义排序策略 cmp 函数
    • 不带 cmp 参数的 sort 函数实现从小到大排序
    • 所需头文件: algorithm
  • vector<int> ans;
    • 实现变长数组,元素类型可任意指定
      • ans.push_back(num[i])往变长数组末尾中添加一个元素
      • ans.pop_back()删除变长数组中最后一个元素
    • 需要的头文件:vector

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <vector>
#include <string>
#include <map>
#大专栏  PAT B1080 MOOC期终成绩(C++)ta-keyword">include <iostream>
#include <algorithm>
using namespace std;
struct {
string name;
int gp = 0, gm = -1, gf = 0, g = 0;
}newstu;
vector<Student> stu, ans;
map<string, int> nametoi;
bool cmp(Student a, Student b){
if(a.g == b.g) return a.name < b.name;
else return a.g > b.g;
}
int main() {
int n1, n2, n3;
cin >> n1 >> n2 >> n3;
string id;
int score, i, cnt = 0;
for(i = 0; i < n1 + n2 + n3; i++){
cin >> id >> score;
if(nametoi.find(id) == nametoi.end()){
newstu.name = id;
stu.push_back(newstu);
nametoi[id] = cnt++;
}
if(i < n1) stu[nametoi[id]].gp += score;
else if(i < n1 + n2) stu[nametoi[id]].gm = score;
else stu[nametoi[id]].gf = score;
}
for(int i = 0; i < cnt; i++){
if(stu[i].gp >= 200){ // 计算最终成绩,并保存合格的学生
stu[i].g = (stu[i].gm > stu[i].gf) ? (int)((stu[i].gm * 4 + stu[i].gf * 6 + 5)/10) : stu[i].gf;
if(stu[i].g >= 60) ans.push_back(stu[i]);
}
}
sort(ans.begin(), ans.begin() + ans.size(), cmp);
for(int i = 0; i < ans.size(); i++){
cout << ans[i].name;
printf(" %d %d %d %dn", ans[i].gp, ans[i].gm, ans[i].gf, ans[i].g);
}
return 0;
}

PAT B1080 MOOC期终成绩(C++)的更多相关文章

  1. PAT 1080 MOOC期终成绩(25)(STL-map及multiset+思路+测试点分析)

    1080 MOOC期终成绩(25 分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获 ...

  2. 【PAT】B1080 MOOC期终成绩(25 分)

    还是c++好用,三部分输入直接用相同的方法, 用map映射保存学生在结构体数组中的下标. 结构体保存学生信息,其中期末成绩直接初始化为-1, 注意四舍五入 此题还算简单 #include<ios ...

  3. PAT 1080 MOOC期终成绩

    https://pintia.cn/problem-sets/994805260223102976/problems/994805261493977088 对于在中国大学MOOC(http://www ...

  4. PAT 乙级 1080 MOOC期终成绩 (25 分)

    1080 MOOC期终成绩 (25 分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的 ...

  5. P1080 MOOC期终成绩

    1080 MOOC期终成绩 (25分)   对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分 ...

  6. PAT1080 MOOC期终成绩 (25分) ——同样参考了柳婼大神的代码及思路,在自己的代码上做了修改,还是很复杂

    1080 MOOC期终成绩 (25分)   对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分 ...

  7. PAT Basic 1080 MOOC期终成绩 (25 分)

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  8. 1080 MOOC期终成绩

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  9. 1080. MOOC期终成绩 (25)

    对于在中国大学MOOC(http://www.icourse163.org/)学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满 ...

随机推荐

  1. 吴裕雄--天生自然TensorFlow高层封装:Keras-CNN

    # 1. 数据预处理 import keras from keras import backend as K from keras.datasets import mnist from keras.m ...

  2. Git与IDEA集成

    软件配置: 系统版本:Windows10 JDK版本:1.8 Git版本:2.19.1 IDEA版本:2016.3 Maven版本:3.5.4 Git安装: Git下载地址:https://git-s ...

  3. Java之多线程方式二(实现Runnable接口)

    /** * 创建多线程的方式二:实现Runnable接口 * 1. 创建一个实现了Runnable接口的类 * 2. 实现类去实现Runnable中的抽象方法:run() * 3. 创建实现类的对象 ...

  4. Java之常见异常

    package com.atguigu.java1; import java.io.File;import java.io.FileInputStream;import java.util.Date; ...

  5. 【ccf- csp201509-4】高速公路

    #include<iostream> using namespace std; void DFS(int**mat, int *mark,int *sp, int n, int p) { ...

  6. Opencv笔记(十二)——形态学转换

    学习目标: 学习不同的形态学操作,例如腐蚀,膨胀,开运算,闭运算等 我们要学习的函数有: cv2.erode(), cv2.dilate(), cv2.morphologyEx()等 原理简介: 形态 ...

  7. bzoj1396识别子串(SAM+线段树)

    复习SAM板子啦!考前刷水有益身心健康当然这不是板子题/水题…… 很容易发现只在i位置出现的串一定是个前缀串.那么对答案的贡献分成两部分:一部分是len[x]-fa~len[x]的这部分贡献会是r-l ...

  8. [SDOI2019]热闹又尴尬的聚会(图论+set+构造)

    据说原数据可以让复杂度不满的暴力O(Tn^2)过掉……O(Tn^2)方法类似于codeforces一场div2的E题 有一种比较好的方法:每次找出原图G中度最小的点加入q,然后将相邻的点加入新图G'. ...

  9. Linux集群软件安装实战

    一.需求和思路 1. 需求描述 公司有N个节点的集群,需要统一安装一个软件(jdk)需要开发一个脚本程序,实现对集群中的N个节点批量自动下载.安装jdk 2. 思路 1)编写一个启动脚本,用来发送一个 ...

  10. eclipse web 项目配置 运行