最新消息:

2017年NOIP(全国青少年信息学奥林匹克联赛)普及组第1题—成绩

C++ 少儿编程 1627浏览 0评论

问题描述

牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:

总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%

牛牛想知道,这门课程自己最终能得到多少分。

输入格式:

三个非负整数A,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是100分。

输出格式:

一个整数,即牛牛这门课程的总成绩,满分也是100分。

输入样例1: 

100 100 80

输出样例1:

90

输入样例2:

60 90 80

输出样例2:

79

输入输出样例1说明

牛牛的作业成绩是100分,小测成绩是100分,期末考试成绩是80分,总成绩是100×20%+100×30%+80×50%=20+30+40=90

输入输出样例2说明

牛牛的作业成绩是60分,小测成绩是90分,期末考试成绩是80分,总成绩是60×20%+90×30%+80×50%=12+27+40=79

数据说明

对于30%的数据,A=B=0

对于另外30%的数据,A=B=100

对于100%的数据,0≤A,B,C≤100A,B,C都是10的整数倍。

 


问题分析:

这道题是2017年noip普及组的第一题,很担心有坑,但仔细想想就是很简单的。一定要注意的是输入的是整数输出的也是整数,那我们就很好奇,中间经过*百分比的操作是不是需要强制转换等。其实没必要,我们看数据说明的第三条,100%的数据都满足0≤A,B,C≤100A,B,C都是10的整数倍。如果A,B,C都是10的整数倍的话,那么A×20%+B×30%+C×50%的结果必然是整数。所以运算的时候没必要使用浮点数,浮点数反而会影响结果的精度。

 


AC代码如下:

#include <iostream>

 

using namespace std;

 

int main(){

 

int a,b,c,ans;

 

cin >> a>> b >> c;

ans=a*20/100+b*30/100+c*50/100;

 

cout <<ans<< endl;

 

return 0;

}

或者简化也可以:

#include <iostream>

 

using namespace std;

 

int main(){

 

int a,b,c,ans;

 

cin >> a>> b >> c;

ans = a/5 + b*3/10 + c/2;

 

cout <<ans<< endl;

 

return 0;

}

转自公众号:
noip案例讲解

您必须 登录 才能发表评论!