友情提示:380元/半年,儿童学编程,就上码丁实验室。
问题描述
总成绩=作业成绩×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≤100且A,B,C都是10的整数倍。
问题分析:
这道题是2017年noip普及组的第一题,很担心有坑,但仔细想想就是很简单的。一定要注意的是输入的是整数输出的也是整数,那我们就很好奇,中间经过*百分比的操作是不是需要强制转换等。其实没必要,我们看数据说明的第三条,100%的数据都满足0≤A,B,C≤100且A,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案例讲解