irpas技术客

【C语言】BC64牛牛的快递_Watremelon

irpas 6859

文章目录 题目简介代码块解题步骤第一步第二步

题目简介

困扰了自己两三天的一道题目 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了。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #C语言BC64牛牛的快递