牛客网刷题 | BC64 牛牛的快递

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费

输入描述:

第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,'y' 表示加急 ,'n' 表示不加急。

输出描述:

输出牛牛总共要支付的快递费用


题目解析:

这道题目我思考的时间不久,但是代码敲出来后发现

题目要求不满足1kg的时候也要按照1kg来算

这就让我犯难了,我一开始想的是取模,然后测试了不行

后面又想到了有没有一种直接可以把小数点后面的内容读取出来的函数

后面在看题目解析的时候,发现有

但是我还是趋向于想按照我的方法来写

出现了好几个低级的差错

 把用户输入的那一句代码放到了判断的后面

这也导致我很久没发现出问题来

还是要慢工出细活啊

不能着急


代码如下: 

# include <stdio.h>
int main ()

{
    //根据题意 一行输出一个单精度浮点型 和一个字符 再来一个总和
    float a = 0.0;
    char b = '0';
    int value = 0;

    int c;//判断小数部分的
    int add;//用来判断是否需要加急的

     //用户输入数据
    scanf("%f %c",&a,&b);
    
    
    if (b=='y') 
    {
        add=5;
    }
    if (b=='n') 
    {
        add=0;
    }
   
    if(a<=1)//首先判断小于1千克并且是否加急的情况
    {
        printf("%d",add+20);
    }

    if(a>1)
    {
        c=a;//赋值给整数类型 自动舍弃小数部分
        if (a-c>0) 
        {
            printf("%d",add+20+c);
        }
        else {
        printf("%d",add+20+c-1);
        }
    }
    return 0;
}

代码解析↑

大佬们写的高级代码: 

#include <math.h>
int main() {
    float a;
    char b;
    int money=20;
    scanf("%f %c", &a, &b);
      if(a>0&&a<=1)
    {
        if(b=='y')
            printf("25");
        else
            printf("20");
    }
  if(a>1)
  {
      money=money+ceil(a-1);    //向上取整函数
      if(b=='y')
          printf("%d",money+5);
      else
          printf("%d",money);
  }

   
}

拓展:

以下来自:菜鸟教程 C 库函数 – ceil() | 菜鸟教程 (runoob.com)

C 库函数 - ceil()

向上取整函数

描述

C 库函数 double ceil(double x) 返回大于或等于 x 的最小的整数值。

声明

下面是 ceil() 函数的声明。

double ceil(double x)

参数

  • x -- 浮点值。

返回值

该函数返回不小于 x 的最小整数值。

实例

下面的实例演示了 ceil() 函数的用法。

#include <stdio.h>
#include <math.h>

int main ()
{
   float val1, val2, val3, val4;

   val1 = 1.6;
   val2 = 1.2;
   val3 = 2.8;
   val4 = 2.3;

   printf ("value1 = %.1lf\n", ceil(val1));
   printf ("value2 = %.1lf\n", ceil(val2));
   printf ("value3 = %.1lf\n", ceil(val3));
   printf ("value4 = %.1lf\n", ceil(val4));
   
   return(0);
}

让我们编译并运行上面的程序,这将产生以下结果:

value1 = 2.0
value2 = 2.0
value3 = 3.0
value4 = 3.0

  

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值