题解 P7621 【[AHOI2021初中组] 超市购物】
Cripple_Abyss · · 题解
题目传送门
Description :
-
小可可购买了
n 个商品,第i 个价格为a_i 元,买了b_i 个。 -
求在打了八五折的基础上需要付多少钱。
-
用
\color{red}\text{去尾法} 保留一位小数!!!(这个在考场上害了许多人)
Solution :
-
模拟,每次加上
a_i \times b_i 。 -
主要还是如何用去尾法保留一位小数:
-
这里介绍一个比较好理解的方法,将最后的答案减去 0.49,然后在四舍五入。
-
为什么是 0.49 而不是 0.5 ???
-
我在考场调了很长时间,结果发现在 C++ 中是“四舍六入五成双” !!!
-
这里 “四” 是指
\le4 时舍去,"六" 是指\ge6 时进一。 -
最复杂的是 “五” , "五" 指的是根据 5 后面的数字来定,当 5 后有数时,舍 5 进 1 ;当 5 后无有效数字时,需要分两种情况来讲:5 前为奇数,舍 5 入 1 ;5 前为偶数,舍 5 不进( 0 是偶数)。
Code(我的考场代码):
#include <cstdio>
int n,b;
float a,ans;
int main() {
scanf("%d",&n);
while (n--) {
scanf("%f%d",&a,&b);
ans+=a*b;
}
printf("%.1f",ans*0.85-0.049);
return 0;
}