出租车费
题目描述
某市出租车计价规则如下:起步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 }