小车问题

【问题描述】 
甲,乙两人要同时从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;
}

 

转载于:https://www.cnblogs.com/qilinart/articles/4975838.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值