日期:2014-05-20  浏览次数:20742 次

面试题 求解
出租车收费规定如下:
运行里程                                                     收费标准
<4km                                                             10元
4km <=运行里程 <15km                                 1.2元/km
运行里程> 15km                                           1.6元/km    
如何打车最省钱?说明   分析结果和理由    
在显示生活中你会这样打车么?为什么?


------解决方案--------------------
我觉得这题的意思是 出租车行驶 i 公里,总费用为 charge , 平均每公里费用avg最少为最省钱
写了一个小程序:如下

==============
public class Taxi{
public double charge(int a){ // a车量行驶的距离
double charge = 0;
if(a <4)
charge = 10;
else if(a> =4 && a <15)
charge = 10+(a-4)*(1.2);
else if(a> =15)
charge = 10 + 13.2 + (a-15)*(1.6);
return charge;
}


public static void main(String args[]){
double avg = 0;
Taxi t = new Taxi();
for(int i = 1;i <20;i++){
avg = t.charge(i)/i;
System.out.println( "行驶 " + i + "公里平均费用为: " +avg);
}
}

}
------解决方案--------------------
很明显,公司是要这样的答案:
什么时候每一公里所对应的平均钱数最少?
函数关系如下:
p=10/x;(0 <x <4)
p=[1.2(x-4)+10]/x;(4 <=x <15)
p=[1.6(x-15)+23.2]/x;(x> =15)
这个函数关系是个分段函数,需要求其最低点!!!!!!

呵呵,楼主满意的话给个分哈~~


------解决方案--------------------
public class Taxi{
public double charge(int a){ // a车量行驶的距离
double charge = 0;
if(a <4)
charge = 10;
else if(a> =4 && a <=15)
charge = 10+(a-4)*(1.2);
else if(a> =15)
charge = 10 + 13.2 + (a-15)*(1.6);
return charge;
}


public static void main(String args[]){
double avg = 0;
Taxi t = new Taxi();
for(int i = 1;i <=15;i++){
min=0;
avg = t.charge(i)/i;
if(i=1)
{
min=avg;
continue;
}
min=avg <min?avg:min

}
System.out.println( "行驶 " + i + "公里平均费用为: " +avg+ "最划算 ");

}

}

------解决方案--------------------
t <=4 price > = 2.5/h(最贵,但是不得不坐这一段)
4 <t <=15 price = 1.2/h(最便宜)
t> 15 price = 1.6/h

=>
一般就直接到终点得了
小于15就不用说了,大于15分成两段甚至三段的话就要承受前面 2.5/h的高价格
纯数学上考虑,后面的价格高点还有点意思;现在的话就是要找出个点,从这个分开来后便这一段的平均价格要低于1.6/h了