1093 - 出租车费
时间限制 : 1 秒
内存限制 : 32 MB
某市出租车计价规则如下:起步4公里10元,即使你的行程没超过4公里;接下来的4公里,每公里2元;之后每公里2.4元。行程的最后一段即使不到1公里,也当作1公里计费。
一个乘客可以根据行程公里数合理安排坐车方式来使自己的打车费最小。
例如,整个行程为16公里,乘客应该将行程分成长度相同的两部分,每部分花费18元,总共花费36元。如果坐出租车一次走完全程要花费37.2元。
现在给你整个行程的公里数,请你计算坐出租车的最小花费。
<br />
题目输入
输入包含多组测试数据。每组输入一个正整数n(n<10000000),表示整个行程的公里数。
当n=0时,输入结束。
题目输出
对于每组输入,输出最小花费。如果需要的话,保留一位小数。
输入/输出样例
输入格式
3 9 16 0
输出格式
10 20.4 36
C语言解答
#include<stdio.h> int main() { int n,x; double s; while(scanf("%d",&n)!=EOF,n) { if(n<=4) { printf("10\n"); continue; } s=n/8*18; x=n%8; if(!x) printf("%.lf\n",s); else if(x>=5) { s+=10+2*(x-4); printf("%.lf\n",s); } else { s+=2.4*x; printf("%.1lf\n",s); } } return 0; }
C++解答
#include<stdio.h> int main() { int n,x; double s; while(scanf("%d",&n)!=EOF,n) { if(n<=4) { printf("10\n"); continue; } s=n/8*18; x=n%8; if(!x) printf("%.lf\n",s); else if(x>=5) { s+=10+2*(x-4); printf("%.lf\n",s); } else { s+=2.4*x; printf("%.1lf\n",s); } } return 0; }
Java解答
import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Scanner; class Main { private static Scanner scan=new Scanner(System.in); public static void main(String[] args) { boolean flag=true; List<Double> list=new ArrayList<Double>(); while(flag) { Double value; int n=scan.nextInt(); if(n==0) { flag=false; break; } else { if(n<=4) { value=10.00; } else if(n<=8) { value=(double) (10+(n-4)*2); } else { value=(double) (18*(n/8)); if(n%8>4) { value=value+10+(n%8-4)*2; } else { value=value+(n%8)*2.4; } } list.add(value); } } for (Double s : list) { double ss=(double)s; if(ss-(int)ss==0) { System.out.println((int)ss); } else { DecimalFormat df = new DecimalFormat("0.0"); System.out.println(df.format(ss)); } } } }
Python解答
import sys for line in sys.stdin: kilo = int(line.split()[0]) if kilo != 0: if 0< kilo <= 4: print 10 elif 4< kilo <= 8: print 10+(kilo-4)*2 elif kilo>8: a,b = divmod(kilo,8) if b ==0: print 18*a+int(2.4*b) elif b<=4: print 18*a+round(2.4*b,1) elif b>4: print 18*a+10+(b-4)*2