C++洛谷题解(13)
洛谷“顺序结构”的最后一篇题解
题号:P3954
题名:[NOIP2017 普及组]成绩
题目:小明最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
小明想知道,这门课程自己最终能得到多少分。
这道题是整个“顺序结构”最难的题,至少题目上是最难的。但这道题本质上并不难,因为有公式:
n=homework*20%+test*30%+examination*50%
而真正最难的是它有“坑”,[哭笑][哭笑][哭笑]
首先是百分数,由于C++的%是取余的作用,并不是百分数,所以就得用小数来弥补%。
但这也为这个“坑”埋下了伏笔。因为*0.2/0.3/0.5就有可能变成小数,虽然题目没有说,但你并不能少算这一步。(NOIP终归是你NOIP,就是给你P1001你也做不对)
AC代码:
#include<bits/stdc++.h>//依旧是万能头
using namespace std;
int main(){//程序入口
double a,b,c;//double类型的a,b,c,float太小,容易溢出
double s;//s也同理
scanf("%lf%lf%lf",&a,&b,&c);//用scanf的形式,省时费力
s=a*0.2+b*0.3+c*0.5;//用计算公式直接算
printf("%.lf",s);//保留一位小数保险
return 0;//完美的结束
}
其实还有一个办法,百分数就必须是小数或分数吗?不是的,其实也可以写成*20/100的形式也可以,这样就不会出现这个Bug了,具体代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c;
int s;
scanf("%d%d%d",&a,&b,&c);
s=a*20/100+b*30/100+c*50/100;
printf("%d",s);
}
由此可以看出,NOIP并不是无懈可击的,只需要你的细心与仔细。