题目描述
在杭州打车的费用并不是你每行驶一公里的常数:前4公里的费用是10元(人民币是中国的货币单位),即使你没有完成;接下来的4公里每公里2元,剩下的每公里2.4元;即使行程较短,最后一段也被视为1公里。如果使用得当,旅行者可以通过在行程中间重新设置仪表来降低成本。例如,如果行程是16公里,他应该将其切成两个相同长度的部分,每一半将花费18元,总成本为36元,低于原价37.2元。现在,考虑到行程的长度,找到最小成本。
输入
输入包含多个情况,每个情况在单独的行中都有一个正整数,表示行程的长度。所有输入数据都小于10000000。继续,直到出现应忽略的零的情况。
输出
对于每种情况,输出最低成本,如有必要,在小数点后保留一位数字。
样例输入
3
9
16
0
样例输出
10
20.4
36
路程等于0必须要判断,把我搞惨了一直通不过
if(n==0) break;
#include<bits/stdc++.h>
using namespace std;
double fun(int n)
{
if(n>0&&n<=4) return 10;//起步价
else if (n>4 && n<=8) return 10 + (n-4)*2;//重新打车
else if (n>8 && n<=12) return 18 + (n-8)*2.4;//继续坐车
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
double cost=0;
if(n==0)break;//必须判断
while(n>12)//先算前8公里
{
n=n-8;
cost = cost+18;
}
cost = cost+fun(n);
printf("%g\n", cost);//%g整数浮点数都能输出
}
return 0;
}