【C语言】BC64牛牛的快递(DAY 5)

题目简介

困扰了自己两三天的一道题目
BC64牛牛的快递
描述
牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费
输入描述:
第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,‘y’ 表示加急 ,‘n’ 表示不加急。
输出描述:
输出牛牛总共要支付的快递费用
在这里插入图片描述
在这里插入图片描述

代码块

#include<stdio.h>
int main()
{
    int price=0;;//价格
    int  i=0;//超出的公斤数
    float a=0.0;//公斤数
    char b=0;//y n
    int cnt;
    scanf("%f %c",&a,&b);
    
    if(a<=1.0)
    {
        if(b=='y')
        {
            price=20+5;
        }
        else 
        price=20;
    }
    else if(a>1)
    {
       if((a-1.0)!=(int)(a-1.0))
       {
           i=(int)(a-1.0)+1;
       }
       else 
       {
           i=a-1.0;
       }
       
       if(b=='y')
       {
           price=20+i+5;
       }
        else{
            price=20+i;
        }
    }
    printf("%d",price);
    return 0;
}

解题步骤

前两天做的时候总是在第八组实验样例中报错,于是自己在斤数上加加减减,但也没有起到作用,于是就往后刷题了,没有再管。但是!这就像无数修炼过程中的一个阻碍,如果不突破他,自己也很难有大进步。所以今天就再推倒重来!无非是再来一次!

第一步

首先看题,1kg之内的快递是20元,如果再加急的话就是再加五块钱。不加急,就是20元。这样第一个循环也就能写出来了,先不用管我们变量都用什么类型的,咱们先把主要的框架想出来,再去解决细枝末节的东西。就和雕刻一样,都是先雕一个大概,再去修饰。
在这里插入图片描述

第二步

其次,如果快递超出1kg,每1kg都要加一块钱,不足1kg的也按1kg算。
这时候我就在想,如何才能表示不足1kg时,也按1kg算。我想到了强制转换类型,如果是1.5kg,那1kg是基础费用,这0.5就是而外加的,如何表示?
在这里插入图片描述
不难看出,int形的强制转换是向下取整,所以我们索性加个1好了,要不然怎么表示小于1时额外的钱。

   else if(a>1)
    {
       if((a-1.0)!=(int)(a-1.0))
       {
           i=(int)(a-1.0)+1;
       }
       else 
       {
           i=a-1.0;
       }
       
       if(b=='y')
       {
           price=20+i+5;
       }
        else{
            price=20+i;
        }
    }
    printf("%d",price);
    return 0;

这第二步的代码才是最重要的,我一步一步翻译。
else if(a>1) 这是当快递大于1kg时,
在这里插入图片描述
如果快递斤数-1.0 不等于强制转换类型后的a-1.0
这个意思就是 快递斤数-1.0 后如果还是小数 那就是几点几的表示形式,这种情况我们需要对它向下取整并加一,但是!如果我们减去1后它就是一个整数怎么办?这也是我遇到的最关键的问题,如果减1后是一个整数,我们再强制转换再加1,那数值就超出预计的数了,多加了一次1。 所以为了解决这个问题,我写了这个if循环。
这个结果是我没有写这个循环时候的报错
在这里插入图片描述
其实这道题最关键的就是判断快递的斤数减1后是不是一个小数,如果是小数,就强制转换再加1。如果是整数就 不用再加1了。

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张学恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值