poj 1326 Mileage Bank【四舍五入】

说实话,这道题虽然不难,但是考人的点还是有的,我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);

			else
				result=result+(int)(miles*1.5)+1;
		}

		else if(classCode[0]=='Y')
		{
			if(miles<=500)
				result+=500;

			else
				result+=miles;
		}
	}

	return 0;
}

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

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

你可能感兴趣的:(poj 1326 Mileage Bank【四舍五入】)