小车问题

【问题描述】 
甲,乙两人要同时从A地出发要尽快同时赶到B地。出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲,乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
【输入】
仅一行,三个数据分别表示AB两地的距离s,人步行的速度a,车的速度b。
【输出】
两人同时到达B地需要的最短时间。
【样例】
car.in
120 5 25

car.out
9.60000
【算法提示】
甲先乘车到达K处后下车步行,小车再回头接已走到C处的乙,在D处相遇后,乙再乘车赶往B地,最后甲,乙一起到达B地。这样问题就转换成了求K处的位置,我们用二分法,不断尝试,知道满足同时到达的时间精度。算法框架如下:
(1)输入s,a,b;
(2)c0=0;c1=s;c=(c0+c1)/2;
(3)求t1,t2;
(4)如果t1<t2,那么c=(c0+c)/2
否则c=(c+c1)/2;
反复执行(3)和(4),直到abs(t1-t2)满足精度要求(即小于误差标准)。

 

 

#include<stdio.h>
#include<math.h>
int main(){
    float s,a,b,t1,t2;
    scanf("%f %f %f",&s,&a,&b);
    float k1=0,k2=s,k=0;
    do{
        k=(k1+k2)/2;
        t1=k/b+(s-k)/a;
        //t2=k/b+k/(a+b)+(s-a*(k/b+k/(a+b)))/b;
        t2=(2*k*b/(a+b)+k)/b;
        if (t1<t2) k2=k;
        else k1=k;
        //printf("%.5f %.5f\n",t1,t2);
    }while (fabs(t1-t2)>1e-3);
    
    printf("%.5f %.5f\n",t1,t2);
    return 0;
}

 

posted @ 2015-11-18 20:39  qilinart  阅读(475)  评论(0编辑  收藏  举报