题目描述

牛牛最近学习了 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的整数倍,所以不会出现小数。
代码如下:
#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