牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费。
第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,‘y’ 表示加急 ,‘n’ 表示不加急。
输出牛牛总共要支付的快递费用。
输入: 1.5 y
输出: 26
输入: 0.7 n
输出: 20
这题是个简单的模拟,分情况讨论即可。唯一需要注意的是,不足1kg 的部分要按 1kg 计算 ,说明要将重量向上取整。这里我给大家提供两个方法,①使用库函数 ceil() ,这个函数的作用是返回一个数向上取整的结果。位于 cmath 头文件里。②由于将浮点型数字强制类型转换为整形是向下取整,我们可以用不强制类型转换的浮点型数与强制类型转换后的数相减,大于 0 说明需要向上取整, +1 即可。

#include
#include
using namespace std;
int main()
{
double a;
char b;
cin >> a >> b;
int ans = 0;
// 小于 1kg 的情况
if (a <= 1)
{
ans = 20;
}
// 大于 1kg 的情况
else
{
// 向上取整 20 + ceil(a) - 1;
ans = ceil(a) + 19;
// 另一种方法:
/*
if (a - (int)a > 0)
{
ans = 20 + (int)a - 1 + 1;
}
else
{
ans = 20 + (int)a - 1;
}
*/
}
// 加急则 +5 元
if (b == 'y')
ans += 5;
cout << ans;
return 0;
}