题解:P1422 小玉家的电费

· · 题解

思路

这是一道典型的分段计费问题。我们跟着题目条件来,设输入的数为 n,所交电费为 S,分以下三种情况讨论:

总结一下,分段计费问题的核心思路就是分段讨论。(就像你七年级学的零点分段

还有个问题就是四舍五入到小数点后一位,我们把这个过程形式化地写下来。设待进行四舍五入的小为 a,答案为 a'

其中,[a] 表示 a 向下取整。

其实,上述过程可以简化为

a' = [10a+0.5] \div 10

请大家牢记这种东西,因为如果你在这种地方出现错误,那就是非常可惜了。

代码

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int n; cin >> n;
    double b = 0;
    if(n <= 150) { // 讨论,求解答案
        b = n * 0.4463;
    } else if(n > 150 && n <= 400) {
        b = 150 * 0.4463 + (n - 150) * 0.4663;
    } else {
        b = 150 * 0.4463 + 250 * 0.4663 + (n - 400) * 0.5663;
    } cout << floor(b * 10 + 0.5) / 10.0; // 四舍五入
    return 0;
}