出租车费
时间限制: 1 Sec 内存限制: 32 MB
题目描述
某市出租车计价规则如下:起步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
题意概括
打出租车,起步4公里,即使没有超过4公里,也是十块钱,超过4公里之后的4公里每公里2块,在超过这个4公里之后每公里2.4块;给出总路程,问最便宜的乘车方案;输出最低价格;
解题思路
首先判断如果路程大于16km那么久先乘坐起步十块,之后再跑4公里,也就是18块8km,知道小于16km的时候然后再判断剩下的如果在8km以内,则按照起步价和之后四公里的价格来算,如果小于12就使用2.4块/km来计算,否则之后就跑12km来计算。
代码
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
int main ()
{
int n,m,i,j;
while(~scanf("%d",&n)){
if(n==0)
break;
m=0;
while(n>=16){
m+=18;
n-=8;
}
if(n<=4){
printf("%d
",10+m);
}
else if(n<=8){
n-=4;
m+=10+n*2;
printf("%d
",m);
}else if(n<=12){
n-=8;
m+=18;
printf("%.1lf
",(double)m+n*2.4);
}else {
n-=12;
m+=28;
printf("%d
",m+n*2);
}
}
return 0;
}