题目描述
某市出租车计价规则如下:起步4公里10元,即使你的行程没超过4公里;接下来的4公里,每公里2元;之后每公里2.4元。行程的最后一段即使不到1公里,也当作1公里计费。
一个乘客可以根据行程公里数合理安排坐车方式来使自己的打车费最小。
例如,整个行程为16公里,乘客应该将行程分成长度相同的两部分,每部分花费18元,总共花费36元。如果坐出租车一次走完全程要花费37.2元。
现在给你整个行程的公里数,请你计算坐出租车的最小花费。
输入
输入包含多组测试数据。每组输入一个正整数n(n<10000000),表示整个行程的公里数。
当n=0时,输入结束。
输出
对于每组输入,输出最小花费。如果需要的话,保留一位小数。
样例输入
3
9
16
0
样例输出
10
20.4
36
思路:当行程数在8公里内时,只打一辆车就可以了。但是如果它大于了8公里,就有两种情况,大于8公里的部分在4公里之内(包括4公里),则不换乘,若大于4公里,那么换乘比较划算。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,money,y,a,result,flag,i;
double x,money1;
while(cin >>x){
if(x==0)
break;
flag=0;
if(x<=4)
money=10;
else if(x>4&&x<=8){
y=x;
if(y<x)
y++;
money=10+(y-4)*2;
}
else if(x>8){
y=x;
if(y<x)
y++;
a=y%8;
result=(y-a)/8;
money=result*18;
if(a>0&&a<=4){
money1=money+a*2.4;
flag=1;
}
else if(a>4)
money+=(10+(a-4)*2);
}
if(flag)
printf("%.1lf\n",money1);
else
cout <<money<<endl;
}
return 0;
}