LUOGU P3954题解(NOIP 2017普及组第一题)
2017-11-26 21:19
309 查看
题目描述:
牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
牛牛想知道,这门课程自己最终能得到多少分。
NOIP 2017普及组的第一题,很多神犇+大佬一看到此题马上开始切,过了第一个样例点之后直接去切下一道,然而,这里有个小细节需要我们去注意。
我们在用double 或者是 flout 实数类型的时候,赋值时会有微弱的区别,比如说:
double a=0.2;
这个时候,计算机会将其储存为:
a=0.1999999 或者是 a=0.2000001
我们用5*a 的时候,有可能输出0(当答案<1时直接储存为0),也有可能输出1, 所以这是一大坑点。(虽然CCF已经解决)。
但是,我们要避免这种情况的发生,我们可以采用强制类型转换的方法,亦可是直接进行除法运算,即可解决。
代码如下:
1.强制类型转换
2.除
牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
牛牛想知道,这门课程自己最终能得到多少分。
NOIP 2017普及组的第一题,很多神犇+大佬一看到此题马上开始切,过了第一个样例点之后直接去切下一道,然而,这里有个小细节需要我们去注意。
我们在用double 或者是 flout 实数类型的时候,赋值时会有微弱的区别,比如说:
double a=0.2;
这个时候,计算机会将其储存为:
a=0.1999999 或者是 a=0.2000001
我们用5*a 的时候,有可能输出0(当答案<1时直接储存为0),也有可能输出1, 所以这是一大坑点。(虽然CCF已经解决)。
但是,我们要避免这种情况的发生,我们可以采用强制类型转换的方法,亦可是直接进行除法运算,即可解决。
代码如下:
1.强制类型转换
#include<iostream> #include<cstdio> using namespace std; int main() { double a,b,c; cin>>a>>b>>c; double res=a*0.2+b*0.3+c*0.5; long ans=(long) res; //强制将double类型数res转化为长整数ans。 cout<<ans; //输出 return 0; }
2.除
#include<iostream> #include<cstdio> using namespace std; int main() { long a,b,c; cin>>a>>b>>c; long res=(a/5)+(b/3.333)+(c/2); //进行除法运算,注意b cout<<res; //输出 return 0; }
相关文章推荐
- NOIP2016普及组复赛第一题的ACC程序加题解pascal
- NOIP2015第一题【金币】题解(普及山东tyd)
- 2017NOIp 普及组第一题
- NOIP2017普及组复赛题解
- NOIP2002普及组第一题【级数求和】题解 (普及山东tyd)
- {题解}[jzoj4924]【NOIP2017提高组模拟12.17】向再见说再见
- 2017NOIP普及组 赛前心得
- 【NOIP2017普及组】棋盘
- JZOJ(中山纪中) 2018.01.26【NOIP普及组】模拟赛D组 第一题
- NOIP普及组2017比赛总结
- NOIP2015-普及组复赛-第一题-金币
- JZOJ(中山纪中)2018.01.21【NOIP普及组】模拟赛D组(第一题)
- [NOIP2017普及组]图书管理员
- (2017)第八届蓝桥杯大赛个人赛省赛(软件类) C/C++ 大学A组 题解(第一题和第二题)
- 【NOIP普及组2017】棋盘Chess
- NOIP2014-普及组复赛-第一题-珠心算测验
- noip2016普及组题解和心得
- [NOIP2017普及组]棋盘
- 2017.08.06【NOIP 普及组】模拟赛C组 题解
- NOIP2017普及组解题报告