• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
点击加载
博客园    首页    新随笔    联系   管理    订阅  订阅

出租车费

题目描述

某市出租车计价规则如下:起步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取余,若余数大于5则选择2元的,否则选择2.4的,在加上行程除8乘18.

代码如下:

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 double b[25]={10,10,10,10,10,12,14,16,18,20.4,22.8,25.2,27.6,30};
 6 int main()
 7 {
 8     int a,i,j,k,q,d;
 9     double t,e,c;
10     while(scanf("%d",&a),a!=0) 
11     {
12         if(a<=13)
13         {
14             k=(int)b[a];
15             if(b[a]==k)
16                 printf("%.0lf\n",b[a]);
17             else
18                 printf("%.1lf\n",b[a]);
19             continue;
20         }
21         q=d=a;
22         e=c=0;
23         while(q-8>=13)
24         {
25             q-=8;
26             e+=18;
27         }
28         e+=18;
29         e+=b[q-8];
30         k=(int)e;
31         if(k==e)
32             printf("%.0lf\n",e);
33         else
34             printf("%.1lf\n",e);
35     }
36     return 0;
37 }

 

posted @ 2017-05-02 19:06  点击加载  阅读(217)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3