当前位置: 代码迷 >> 综合 >> poj 1326 Mileage Bank【四舍五入】
  详细解决方案

poj 1326 Mileage Bank【四舍五入】

热度:18   发布时间:2024-01-11 17:02:44.0

说实话,这道题虽然不难,但是考人的点还是有的,我WA了一次,后来检查发现了两个错误,看网上的结题报告,发现基本每个人都错了很多次。。。这说明不只是不仔细这么简单。。。


这道题有两个考人的点:

1.1-500 miles 就说明了 0miles 就不能算跑了路,如果出现 0miles 得算0处理

2.就是四舍五入的地方,只可能出现在 “B” 中,任何整数乘以1.5,只可能是 X.5 或者 X.0,当 X.5 的时候就要进位,但是 X.0 任为整数,不能进位的。。。【四舍五入的分析和模板我会单独写在博客的其他模块中。。。】

我开始就错了这两个地方。。。(下附:题目大意以及别人的思路,以拓宽思路)


AC的代码:

#include <stdio.h>int main()
{char Fcity[1000],Dcity[1000];char classCode[100];int miles;int result=0;while(scanf("%s",Fcity)){if(Fcity[0]=='0'){printf("%d\n",result);//每个测试数据之前初始化result=0;continue;}if(Fcity[0]=='#')return 0;scanf("%s%d%s",Dcity,&miles,classCode);if(miles<=0)continue;//输入结束,处理开始if(classCode[0]=='F')result+=miles*2;//注意!!!else if(classCode[0]=='B'){if(miles*1.5==(int)(miles*1.5))result=result+(int)(miles*1.5);elseresult=result+(int)(miles*1.5)+1;}else if(classCode[0]=='Y'){if(miles<=500)result+=500;elseresult+=miles;}}return 0;
}

题意:一个飞行员为一家航空公司服务,他每次驾驶一个航班,就能按驾驶的里程数赚取一定的费用。该航空公司有3种航班,每种航班的里程数结算规则如下:First Class,里程数+100%里程数补贴;Business Class,里程数+50%里程数补贴;Economy Class,不足500按500算,500以上就算里程数。现给定一个飞行员驾驶的航班,问他最后结算时的里程数是多少。

网上别人的思路:根据题目描述,直接根据航班类型叠加即可。模拟题。注意的是,小数部分是四舍五入。其实,小数只会出现在50%里程数补贴中,+1再除以2就行。