出租车费

\[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;
}
posted @ 2021-01-29 16:35  Dazzling!  阅读(53)  评论(0编辑  收藏  举报