题目描述
牛牛最近学习了 C++入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
牛牛想知道,这门课程自己最终能得到多少分。
输入描述:
输入只有 1 行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。
相邻两个数之间用一个空格隔开,三项成绩满分都是 100 分。
输出描述:
输出只有 1 行,包含一个整数,即牛牛这门课程的总成绩,满分也是 100分。
示例1
输入
100 100 80
输出
90
说明
牛牛的作业成绩是 100分,小测成绩是100分,期末考试成绩是80分,总成绩是 100×20%+100×30%+80×50%=20+30+40=90。
示例2
输入
60 90 80
输出
79
说明
牛牛的作业成绩是 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 的整数倍。
解答
这题应该是的noip普及组历年来最简单的一道题目。
不过,这题是存在问题的,一般人看到题意,马上就想到用3个数分别乘以0.2,0.3,0.5。但是,如果使用int乘以double,是会出现问题的。所以,这题可以使用加权平均数来做。3个成绩的权值分别为2,3,5,最后除以10就可以了。由于都是10的整数倍,所以不会出现小数。
代码如下:
来源:Lukeeclipse
不过,这题是存在问题的,一般人看到题意,马上就想到用3个数分别乘以0.2,0.3,0.5。但是,如果使用int乘以double,是会出现问题的。所以,这题可以使用加权平均数来做。3个成绩的权值分别为2,3,5,最后除以10就可以了。由于都是10的整数倍,所以不会出现小数。
代码如下:
#include<iostream> #include<cstdio> using namespace std; int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); printf("%d\n",(a*2+b*3+c*5)/10); return 0; }
来源:Lukeeclipse