zoukankan      html  css  js  c++  java
  • 小车问题

    题目描述 Description
    甲、乙两人同时从A地出发要尽快同时赶到B地。出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
     输入输出格式 Input/output
    输入格式:
    仅一行,三个数据分别表示AB两地的距离s,人的步行速度a,车的速度b。
    输出格式:
    两人同时到达B地需要的最短时间,保留6位小数。
     输入输出样例 Sample input/output
    样例测试点#1
    输入样例:
    120 5 25
    输出样例:
    9.600000
    思路:刚开始想这题时我想到用动态规划,但仔细想想又好像不对,还是用数学的方法来解方便点。
    这题需要考虑的问题是:该怎样放人、载人才能到达B地且时间最少,后来我仔细想想,只用在某一个地方放人下去(就是说只用交换一次)。
    现在的问题就变为了:该在哪个地方放人下去,带回终点,两人一起到终点,时间最少(首先车带一个人行驶一段距离然后丢下,折回找另外一个人,半路碰上,带回终点刚好与第一人共到B点)
    这样问题就好解决了,设那个放下的点为x,那么就有:(s-x)/a=2*(2*x/(a+b)-x/b)+(s-x)/b
                                                                                         化简得:x=(b+a)*s/(b+3a)
    既然放下的那个点已经确定好了,那么时间也简单了,时间为:x/b+(s-x)/a,(x/b)为那个点前一段所用的时间,[(s-x)/a]为那个点后一段所用的时间。
    代码如下:
     1 #include<stdio.h>
     2 int main()
     3 {
     4     double s,a,b;
     5     double x;
     6     scanf("%lf%lf%lf",&s,&a,&b);
     7     x=(b+a)*s/(b+3*a);
     8     printf("%.6lf
    ",x/b+(s-x)/a);
     9     return 0;
    10 } 

    提示:这些数必须得用double类型的,否则会“-1.#IND00”(无效浮点数)的。

    我不怕千万人阻挡,只怕自己投降…
  • 相关阅读:
    特征选择常用算法综述
    C++中的extern "C"
    OpenGL管道概括
    使用CGAL查找输入三角网格模型独立模型个数
    图形学领域的关键算法及源码链接
    STL学习笔记
    CGAL+QT4.84+Boost1.53 错误[Parse error at "BOOST_JOIN"]
    Template函数
    在windows环境下安装配置CGAL
    关于C++中的堆、栈
  • 原文地址:https://www.cnblogs.com/geek-007/p/4297397.html
Copyright © 2011-2022 走看看