题目要求
描述
牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费
输入描述:
第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,'y' 表示加急 ,'n' 表示不加急。
输出描述:
输出牛牛总共要支付的快递费用
示例1
输入:
1.5 y输出:
26示例2
输入:
0.7 n输出:
20
题目分析
算法原理
模拟支付过程+向上取整
当寄快递的重量小于或者等于1kg时,就是20块,再判断是否加急,加急的话加5块,不加急就不用处理
当寄快递的重量大于1kg时,先用总重量减去1kg算出剩下的重量,然后把剩下的kg数强转为int类型,也就是先向下取整,再用剩下的重量减去强转的重量,如果不为0的话那么剩下的重量加1,为0的话那么就是剩下的重量,再判断是否加急即可
代码实现
int main()
{
// 输入
double a;
char b;
cin >> a >> b;
// 输出
int money = 0;
if (a <= 1)
{
money = 20;
}
else
{
money = 20;
double remain = a - 1; //剩余的重量
int round_down = (int)remain; //向下取整
if (remain - round_down > 0)
{
round_down++;
money += round_down;
}
else
{
money += round_down;
}
}
if (b == 'y')
money += 5;
cout << "所需支付快递费:" << money << endl;
return 0;
}