出租车费
\[f(x) = \begin{cases}
10 & x \le 4 \\
10 + 2(x-4) & 4 < x \le 8 \\
18 + 2.4(x-8) & x \ge 8
\end{cases}
\]
如果\(x \le 4\),那没什么好说的,铁定的\(10\)元。
如果\(4 < x \le 8\),那么我们显然不会下车,下车后重新打车后又是起步价\(10\)元,而我们不下车则是每公里\(2\)元。
如果\(x \ge 8\),那就有文章可做了,\(4 \sim 8\)公里式每公里\(2\)元,而超过\(8\)公里后每公里\(2.4\)元。(实际上题目给的例子已经提示了)
对于超过\(8\)公里的部分,记\(remain = x - 8\)。
\[10+2(remain-4) \le 2.4*remain
\]
解得:
\[remain \ge 5
\]
故剩下距离一旦大于\(5\)时,我们重新打个车更划算,直至剩下距离小于\(5\),我们选择继续乘车。
double n;
int main()
{
while(cin>>n, fabs(n)>eps)
{
double res=0;
if(n <= 4) res=10;
else if(n <= 8) res=10+2*(n-4);
else
{
int cnt=n/8;
int remain=ceil(n-8*cnt);
res+=cnt*18;
if(remain <= 5) res+=remain*2.4;
else res+=10+2*(remain-4);
}
if(res == int(res)) printf("%.0f\n",res);
else printf("%.1f\n",res);
}
//system("pause");
return 0;
}