题解:

快递费 = 按千克算的钱+是否加急的钱。

如果快递<=1kg,ret = 20;

如果快递>1kg,ret = 20(1kg的钱)+剩余千克的价钱(难点)。

再判断是否加急。

难点:

关于快递剩余千克的价钱:

由题目可知,不超过1kg的按照1kg计算,所以要将剩余千克进行向上取整。

比如:1.5~2 2.4~3 2~2

方法一:利用库函数ceil(),包含于头文件#include<cmath>

方法二:将剩余千克强制类型转换为int类型,再用原来剩余千克减去已经强制类型转换的值,如果最终结果>0,则强制类型转换的值+1;

代码:

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

int main() {
    double a;
    char b;
    int ret = 20;
    double c;
    while(cin>>a>>b)
    {
	//按千克算的钱
        if(a<=1)
        {
            ;
        }else {
           c = a-1;
           // c = ceil(c);//方法一
            c=c-(int)c>0?(int)c+1:c;//方法二:
            ret += c;
        }
     //是否加急的钱
        if(b == 'y')
        ret += 5;

        cout<<ret<<endl;
    }
}