题目

题目地址:PAT 乙级 1077

题解

本题没什么难度,但是要注意细节问题,下面简单来说一下;

vector 把输入的学生打分存起来,直接用算法库中的 sort 函数给它们排个序,之后直接剔除首尾两端的元素,之后简单算个平均就解决了问题;

代码过程中需要注意的有两点:

1. 获得一行整数输入

使用 cin.get() 接收 '\n' 判断本行输入是否结束即可;贴一段样例代码

 #include <iostream>
#include <vector>
using namespace std; int main() {
vector<int> vec;
int n = ;
cin >> n;
vec.push_back(n);
while (cin.get() != '\n') {
cin >> n;
vec.push_back(n);
}
cout << endl;
for (int i = ; i < vec.size(); i++)
cout << vec[i] << endl; return ;
}

写这段样例的时候才发现我对while (cin.get() != '\n) 的理解存在一些偏误,说来本题的代码能AC真的是靠运气QAQ!在设计算法的时候刚好避开了这个坑;

问题就在于——cin.get() 会把本行输入的第一个字符吞了,但是上面这段代码恰好规避了这个问题,所以在以上代码的基础上改一下,把第8、9行注释了,我们再来看这段代码

 #include <iostream>
#include <vector>
using namespace std; int main() {
vector<int> vec;
int n = ;
while (cin.get() != '\n') {
cin >> n;
vec.push_back(n);
}
cout << endl;
for (int i = ; i < vec.size(); i++)
cout << vec[i] << endl; return ;
}

输入一下样例以及得到的结果


我们就可以发现,第一个数的3不见了,因为当 cin.get() 判断的过程中会把本行中的第一字符直接吞了,这是需要特别注意的问题;

而在我代码过程中,因为第一个数直接加到了最后的结果变量上,因此相当于运行的 while(cin.get() != '\n') 是从第二个数开始,而在第二个数之前有第一个数输入结束之后的空格,因此有效地规避了这个吞字符地问题,这运气真的是没谁了。。。。。。

2. 浮点数的除法问题

因为除法运算之后可能不是整数,因此数据类型应特别注意

代码

 #include <iostream>
#include <vector>
#include <algorithm>
using namespace std; int main() {
int n = , m = ;
cin >> n >> m;
for (int i = ; i < n; i++) {
vector<int> tmp_vec;
float out = ;
float stu = ;
int tmp;
cin >> tmp;
out += tmp;
while (cin.get() != '\n') {
cin >> tmp;
if (tmp >= && tmp <= m)
tmp_vec.push_back(tmp);
}
sort(tmp_vec.begin(), tmp_vec.end());
tmp_vec.erase(tmp_vec.begin());
tmp_vec.erase(tmp_vec.begin() + tmp_vec.size() - );
for (int j = ; j < tmp_vec.size(); j++)
stu += tmp_vec[j];
stu = stu / tmp_vec.size();
out += stu;
out = out / + 0.5;
cout << int(out) << endl;
tmp_vec.clear();
} return ;
}

PAT 乙级 1077的更多相关文章

  1. PAT 乙级 1077 互评成绩计算 (20)

    在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平 ...

  2. PAT乙级:1077 互评成绩计算 (20分)

    PAT乙级:1077 互评成绩计算 (20分) 在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评 ...

  3. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  4. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

  5. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  6. PAT 乙级 1017

    题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...

  7. PAT 乙级 1015

    题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...

  8. PAT 乙级 1003

    题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...

  9. PAT 乙级 1059

    题目 题目地址:PAT 乙级 1059 题解 开始我是从暴力循环的角度考虑这道题,大概计算了一下时间复杂度应该不会超,但是很不幸没有通过,时间超限:之后考虑搜索算法可能优化不太好,因此就把输入的序列先 ...

随机推荐

  1. 解决Idea项目启动报错:程序包javax.servlet.http不存在

    报错信息 在没有使用maven的时候,web项目从远程仓库获取下以后,起一次启动往往会报错javax.servlet.http程序包找不到,随之而来的java基础包都将不能使用,报错信息如下: 解决方 ...

  2. python——字符编码

    Unicode 是字符集 UTF-8 是编码规则 Unicode:给每一个字符分配一个唯一的ID(又称码位). 编码规则:将码位转换为字节序列的规则. 1.什么是字符编码:字符翻译成数字,所遵循的标准 ...

  3. [题解]luogu_P2155_BZOJ_2186沙拉公主的困惑

    题意求1~N!中与M!互质的数的个数, 首先证明gcd(a,b)=1时gcd(a-kb,b)=1 gcd(a,b)=1 gcd(a%b,b)=1 gcd(a-kb,b)=1 即a-kb与b互质 这样由 ...

  4. 5.用通配符进行过滤 ---SQL

    一.LIKE操作符 通配符(wildcard) 用来匹配值的一部分的特殊字符.搜索模式(search pattern)由字面值.通配符或两者组合构成的搜索条件.通配符本身实际上是SQL的WHERE子句 ...

  5. easyui的datagrid用js插入数据等编辑功能的实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Python3.x下Selenium3.x之安装篇

    环境安装 Python环境: 首先我们需要安装Python语言,这个不过多详述,仅给出建议 Python2.x目前支持的第三方库类较多 Python3.x是修改了许多2.x版本的不足,但支持的库类较少 ...

  7. Windows10家庭版升级至专业版

    控制面板--系统里面修改产品密钥即可. 密钥:VK7JG-NPHTM-C97JM-9MPGT-3V66T.(先断网,不然会提示升级失败)

  8. linux下火狐浏览器安装flash player插件

    1 去官方网站下载flash player 安装包.后缀名为.tar.gz,假设名称为flash.tar.gz 默认在桌面 2 下载后解压缩,使用以下命令 #tar -zxvf /root/Deskt ...

  9. 值类型 VS 引用类型~

    问     题 值  类  型 引 用 类 型 这个类型分配在哪里? 分配在栈上 分配在托管堆上 变量是怎么表示的? 值类型变量是局部复制 引用类型变量指向被分配得实例所占的内存 基类型是什么? 必须 ...

  10. springboot集成shiro实现权限缓存和记住我

    到这节为止,我们已经实现了身份验证和权限验证.但是,如果我们登录之后多次访问http://localhost:8080/userInfo/userDel的话,会发现权限验证会每次都执行一次.这是有问题 ...