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并不是无懈可击的,只需要你的细心与仔细。

posted @ 2022-07-19 19:47  GitTJBKBeta  阅读(28)  评论(0编辑  收藏  举报