全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之顺序结构实战题目(二)
题目—成绩:
问题描述:
牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
牛牛想知道这门课程自己最终能得到多少分。
输入描述:
三个非负整数值A、B、C各自代表牛牛的作业成绩、小测成绩以及期末考试成绩,并且各项分数均以单个空格分隔开;其中三项考试的成绩满分均为100分。
输出描述:
一个整数,即牛牛这门课程的总成绩,满分也是 100 分。
输入及输出样例:
| 输入样例1 | 输出样例1 |
|---|---|
| 100 100 80 | 90 |
| 输入样例2 | 输出样例2 |
|---|---|
| 60 90 80 | 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的整数倍。
问题分析:
根据题意分析,输入三个非负整数,按照公式进行计算,输出结果即可。
写法1:总成绩grade=(A20)/100 + (B30)/100+(C*50)/100
写法2:总成绩grade=A0.2+B0.3+C*0.5
从数学角度来看,这两种方法都可以得出正确的解答。然而,在实际比赛中不建议采用第二种方法。如果根据题目要求将A、B、C定义为整型数据,在运算过程中出现浮点型数据会导致数据类型转换的问题,并最终仍会输出整数值。第二种方法在比赛中通常只能获得60分的成绩(满分100分),其主要原因在于题设条件中指出1/1所有A,B,C均为1/5的倍数,并要求进行乘积后再除以5的操作步骤。计算过程中仅包含整数运算步骤,并且除法结果仍为整数值。这种书写方式不仅简化了计算步骤还能确保计算过程的准确性,在比赛中可以获得满分
程序如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int A,B,C,grade;//定义A,B,C分别存储作业成绩、小测成绩和期末考试成绩,grade表示课程的最终成绩
cin>>A>>B>>C;//输入三个成绩
grade = A*20/100 + B*30/100 + C*50/100;//计算课程的最终成绩
cout<<grade<<endl;
return 0;
}
AI写代码
计算机最专长的是进行数值运算,在处理小数方面确实存在一定的不足,在涉及数值精度方面容易造成误差。因此,在编程解决问题的过程中应当尽量避免使用小数运算,在进行单位转换时应优先将较大的单位转换为较小的单位,在处理除法问题时必须谨慎以确保计算结果的准确性。
