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