本帖最后由 Neil198 于 2009-10-23 14:36:05 编辑

解决方案 »

  1.   

    a = (100 - ((100 - ((100 - (100 / 45 * 5)) / 45 * 5) - (100 / 45 * 5)) / 45 * 5) - ((100 - (100 / 45 * 5)) / 45 * 5) - (100 / 45 * 5)) / 45 * 5 + ((100 - ((100 - (100 / 45 * 5)) / 45 * 5) - (100 / 45 * 5)) / 45 * 5) + ((100 - (100 / 45 * 5)) / 45 * 5) + (100 / 45 * 5)
    Debug.Print a / 4 + (100 - a) / 40(设汽车往返4次后人走的路程为a)
    应该可以用递归,不过不知道有什么巧算。
      

  2.   

    我日呃...我是解方程组来着...
    假设全部到达花费时间是t,第一组人步行的时间t1,第二组人步行的时间t2....第五组人t5
    40(t - t1) + 5t1 = 100
    40(t - t2) + 5t2 = 100
    40(t - t3) + 5t3 = 100
    40(t - t4) + 5t4 = 100
    40(t - t5) + 5t5 = 100
    理论上,全部人的行程总和500
    40t + 5(t1 + t2 + t3 + t4 + t5) = 500
    解方程去,嘿嘿
      

  3.   

     class test
        {
            static void Main()
            {            decimal Result=0;
                Count(0, 100, 5, 40, 8,ref Result);
                Console.WriteLine(Result.ToString());
                Console.ReadLine();
            }
            private static void Count(decimal time, decimal length, decimal peopleSpeed, decimal carSpeed, decimal peopleTotal, ref decimal Result)
            {
                decimal tempTime = 0;
                if (peopleTotal != 2)
                {
                    tempTime = (length - peopleSpeed * time) * 2 / (45);
                    length = length - tempTime * peopleSpeed;
                    peopleTotal = peopleTotal - 2;
                    Result += tempTime;
                    Count(tempTime, length, peopleSpeed, carSpeed, peopleTotal, ref Result);
                }
                else 
                {
                    tempTime = length / 40;
                    Result +=tempTime;
                }
                
            }
        }结果 10.61385459533607681755829904M
      

  4.   

    class test
        {
            static void Main()
            {            decimal Result=0;
                Count(0, 100, 5, 40, 8,ref Result);
                Console.WriteLine(Result.ToString());
                Console.ReadLine();
            }
            private static void Count(decimal time, decimal length, decimal peopleSpeed, decimal carSpeed, decimal peopleTotal, ref decimal Result)
            {
                decimal tempTime = 0;
                if (peopleTotal != 2)
                {
                    tempTime = (length - peopleSpeed * time) * 2 / (peopleSpeed +carSpeed);
                    length = length - tempTime * peopleSpeed;
                    peopleTotal = peopleTotal - 2;
                    Result += tempTime;
                    Count(tempTime, length, peopleSpeed, carSpeed, peopleTotal, ref Result);
                }
                else 
                {
                    tempTime = length / 40;
                    Result +=tempTime;
                }
                
            }
        }
    偷懒了,- -, 改了一下, 
     结果不变  大约 10.61小时
      

  5.   

    高中方法求解了哈:
      设An表示,人车第n次相遇所经过的时间,并设定启动是为第一次相遇 
    则可以已知: A1=0
               Sn=A1+A2+.....+An
               An=2(100-5*Sn-1)/45求  S5  +   (100-5*S5)/40
    提示:先求An
    好了,高中生的题目。
      

  6.   

    用js写的,哈哈function shortedtime()
    {
        var usetime=0;
        var reman=10;
        while(reman>2)
        {
            usetime+=(200-(usetime*10))/45;
            reman-=2;
        }
        usetime+=(100-((100-(usetime*5))/45+usetime)*5)/45;
        alert(usetime);
    }
      

  7.   

    一个地方错了,改了下,最后结果应该是13.49    
    function shortedtime()
    {
        var usetime=0;
        var reman=10;
        while(reman>2)
        {
            usetime+=(200-(usetime*10))/45; //人和汽车一块走
            reman-=2;
        }
        usetime+=(100-((100-(usetime*5))/45+usetime)*5)/40;  //最后只有汽车在走
        alert(usetime);
    }
      

  8.   

    正确结果应该是13.60
    function shortedtime()
    {
        var usetime=100/40;//汽车先带2个人
        var reman=8;
        
        while(reman>0)
        {
            usetime+=(100-(usetime*5))/45; //汽车往回走,相当于人和汽车一块走
            usetime+=(100-(usetime*5))/40; //汽车走
            reman-=2;
        }
        alert(usetime);
    }
      

  9.   


    你这个肯定是错的
    var usetime=100/40。。
    第一次车肯定不能把人送到终点。
      

  10.   

    重新加了下注释
    function shortedtime()
    {
        //汽车先带2个人
        var usetime=100/40;
        //还剩8个人
        var reman=8;    
        
        while(reman>0)
        {
            //汽车往回走,相当于人的速度+汽车的速度
            usetime+=(100-(usetime*5))/45; 
            //汽车和人同一个方向走,相当于汽车的速度
            usetime+=(100-(usetime*5))/40; 
            //剩下的人-2
            reman-=2;
        }
        alert(usetime);
    }
      

  11.   

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim S As Double = 100     '剩余距离
            Dim sCar As Double = 40   '汽车速度
            Dim sP As Double = 5      '人速度
            Dim Time As Double = 0    '过程用时
            Dim TT As Double = 0      '所用时间
            Dim PP As Integer = 10    '剩余人数        For PP = (10 - 2) To 0 Step -2     '每次循环少两个人
                Time = CDbl((S / sCar).ToString("00.00"))    '同向而行时  汽车走完剩余路程所用时间
                S = CDbl((S - (Time * 5)).ToString("00.00"))  '同向而行时  人和汽车再次相遇剩余的距离
                TT = TT + Time             '所用时间
                If PP = 0 Then
                    TextBox1.Text = "剩余路程:" & (S.ToString("00.0000") & "所用时间:" & (TT.ToString("00.00")))  '剩余路程
                    '所用时间
                End If
                Time = CDbl(S / (sCar + sP)).ToString("00.00") '相向而行时  人和汽车汇合所用时间
                S = CDbl((S - (Time * 5)).ToString("00.00"))    '剩余路程
                TT += Time
              
            Next
        End SubO Ye ~ 结果为:剩余路程:32.0000所用时间:13.60
    在剩余32公里处 接完了最后两个人 加上之前的时间 加上在32公里处到达目的地的时间 总共是13.60小时(划算损耗不计哦 还有人上车耽搁的掉头所用时间也不计哦)
      

  12.   

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim S As Double = 100     '剩余距离
            Dim sCar As Double = 40   '汽车速度
            Dim sP As Double = 5      '人速度
            Dim Time As Double = 0    '过程用时
            Dim TT As Double = 0      '所用时间
            Dim PP As Integer = 10    '剩余人数        For PP = (10 - 2) To 0 Step -2     '每次循环少两个人
                Time = CDbl((S / sCar).ToString("00.00"))    '同向而行时  汽车走完剩余路程所用时间
                S = CDbl((S - (Time * 5)).ToString("00.00"))  '同向而行时  人和汽车再次相遇剩余的距离
                TT = TT + Time             '所用时间
                If PP = 0 Then
                    TextBox1.Text = "剩余路程:" & (S.ToString("00.0000") & "所用时间:" & (TT.ToString("00.00")))  '剩余路程
                    '所用时间
                    Return
                End If
                Time = CDbl(S / (sCar + sP)).ToString("00.00") '相向而行时  人和汽车汇合所用时间
                S = CDbl((S - (Time * 5)).ToString("00.00"))    '剩余路程
                TT += Time
              
            Next
        End Sub
    不知道对不  发错号啦 嘿嘿
      

  13.   

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim S As Double = 100     '剩余距离
            Dim sCar As Double = 40   '汽车速度
            Dim sP As Double = 5      '人速度
            Dim Time As Double = 0    '过程用时
            Dim TT As Double = 0      '所用时间
            Dim PP As Integer = 10    '剩余人数        For PP = (10 - 2) To 0 Step -2     '每次循环少两个人
                If PP = 0 Then
                    TextBox1.Text = "在:" & S.ToString("00.0000") & "公里处接完所有人"
                    TT += S / 40  '最后返回所用时间加之间之间=总时间
                    TextBox1.Text += ",总用时:" & (TT.ToString("00.00"))
                    Return
                End If            '<---<---同向开始
                Time = CDbl((S / sCar).ToString("00.00"))    '同向而行时  汽车走完剩余路程所用时间
                S = CDbl((S - (Time * 5)).ToString("00.00"))  '同向而行时  人和汽车再次相遇剩余的距离
                TT = TT + Time             '所用时间
                '<---<---同向结束            '---><---相向开始
                Time = CDbl(S / (sCar + sP)).ToString("00.00") '相向而行时  人和汽车汇合所用时间
                S = CDbl((S - (Time * 5)).ToString("00.00"))    '剩余路程
                TT += Time
                '---><---相向结束
            Next
        End Sub
    修改一下
      

  14.   

    甲乙两地 100公里。  
    甲地有10个人一辆车。
    每个人的移动速度是5公里/小时。
    汽车是40公里/小时。 汽车每次能运两个人。 
    0 |_______________________________________________| 100KM(同向)
    1 时间t=100/40=2.5h
    2 剩余8人前进路程S=2.5*5=12.5
     ‘至此用时2.5小时 到达位置87.5公里处        
    0 |__________________________________________| 87.5KM(相向)
    1 相遇时间t=87.5/(40+5)= 35/18
    2 剩余8人前进路程S=35/18*5=175/18
    3 剩余路程S=87.5-175/18=700/9   
     ‘至此用时400/90小时 到达位置700/9公里处      
    0 |______________________________________| 77.777..  700/9KM(同向)
    1 时间t=700/9/40=700/360
    2 剩余6人员前进路程=700/360*5=175/18 
    3 汽车行人同向而行经过的路程=700/9-175/18=1225/18
     ‘至此用时230/36小时 到达位置1225/18公里处   
    0 |_______________________________| 68  1225/18KM(相向)
    1 相遇时间t=1228/18/(40+5)=1228/810
    2 剩余6人员前进路程=1228/810*5=614/81
    3 剩余路程S=1225/18-614/81
     ‘至此用时230/36小时 到达位置1225/18公里处刚开始准备用这方法呢 #24 
      

  15.   

    我也来玩玩T总为总时间,T正T逆为汽车的正向和逆向行驶时间。
    1000=8人*5*T总+2*40(T总-T逆)
    (40-5)*T正=(40+5)*T逆
    由上面两个式子求T总的最小值。
    经整理得到抽象出数学模型
    3*T正+T逆=250;
    7*T正=9*T逆;
    T总=T正+T逆;
    用动态规划画出3条曲线
    找出交叉点就是最优解。当然利用linq等软件就更方便了。
    具体数值懒得画了。
      

  16.   

    上学时还搞过这些呢 差点就想进这一行了 不是linq是lindo软件 都忘了 不过运筹学论文我还得优呢
      

  17.   

    假设两个人一组
    人1: R1(走路时间)*5 + T1(坐车)*40 = 100
    ^………………………………………………
    人5:R5(走路时间)*5 + T5(坐车)*40 = 100
    ……(R1+R2+R3+……+R5) * 5 + (T1+……T5) * 40 = 500
    R1+R2+ ……+R5 = A …… (T1+……T5) B
    ->  A+8B = 100 -> A+B 的最小值 我的观点
      

  18.   

    前提: 车不能把人送到终点再去接路上走的人。最理想的情况是,车在离终点不远处,将人放下。然后回去接路上的人。并且8个走的人,和车上的两个人,同时到达终点,时间最短。设 ,从起点到第一次车把人放下的时间是t则 100-40t  表示,第一次放下的人 离终点的距离,在这2个人走到终点的时候,车来回去接了4趟。人行走的速度是一样的。所以行走的人的距离是保持不变的。车在里面行驶的平均速度还是40,并且每次来回把人放下的时间间隔相等。所以,车一次来回的时间是 (100-40t)/5 /4前后两段行人的间隔不变,是(40-5)t则  两倍的行人间距 / 车的速度  =车一次来回的时间
    则有等式       (100-40t)/5 /4=2*35t   /  40得   t=4/3总时间 =4/3  +  (100-40*4/3)/5=10.667
      

  19.   

    说一说我的解法:
    正如前面的朋友所说的,最理想的情况是,车在离终点不远处,将人放下。然后回去接路上的人。并且8个走的人,和车上的两个人,同时到达终点,时间最短。 设第一波人在X处下车(起点坐标为0,终点100),此时其他几波人在X/8处,两者间距离为X-X/8=7/8X,此时车在前后人群中来回一趟时间是:
    time = (1/45+1/35)*7/8X,其中1/45*7/8X是车往回走,碰到第二波人的时间,后者是往前走赶上第一波人的时间。
    此时,第一波人的位置应该是X + time*5
    依此类推,要接着去接第三波,第四波...,因为前后人群相对距离不变,因此时间也一样,这样,当第五波人赶上第一波时,第一波人的坐标是 X + time*5*4.所以 X + time*5*4 = 100,解得X=52.941176呵呵,应该没错吧,请高手指点。
      

  20.   

    所以总时间为:
    52.9411/40=1.3235
    (100-52.9411)/5=9.4117time=10.7352
      

  21.   

    结果: 设第一次放下2个人的时间为 T则剩余路程 (100-40T)
    两人间距路程40T-5T=35T
    汽车接人时间 35T/(40+5)
    汽车送人时间 35T/(40-5)
    车要往返4次
    则(100-40T)/5 = (35T/(45)+35T/(35))*4结果约等于10.74
      

  22.   

    10个人同时到达,肯定时间最短。
    则可行的方法:
    1-汽车载2个人,剩下的8个人步行同时出发
    2-汽车到途中某地x,放下两人,设为ab,ab向前走,汽车回头接后面的8人中的2人,设为cd
    3-接到cd,汽车向前开,遇到ab,放下cd,abcd4人向前走,汽车回头再去接两人
    456........
    应该注意到,整个过程花费的时间为:x/40 + (100-x)/5。即汽车第一次放下ab两人的时间x/40   加上  ab两人从放下走到目的地的(100-x)/5时间!
    而ab两人走到目的地的时间(100-x)/5里,汽车走了多远呢?
    注意到,汽车每次回头接人,都是从前面的队伍,走到后面的队伍,再到前面的队伍。而这两个队伍间的距离,是恒定的!这个距离是多少呢?x - (x/8),即7x/8.
    汽车回头接人4次,总共走了28x/8所花时间为(28x/8)/40
    这个时间刚好等于ab两人从放下走到目的地的(100-x)/5时间!
    所以有(28x/8)/40=(100-x)/5
      

  23.   

    x=1600/23
    总时间为x/40 + (100-x)/5
    笔算好像是180/23
    前面有误哦...
      

  24.   

    悲剧啊,发现错了一个地方
    sniper熊   中间的距离是恒定的吧,但是汽车在这个距离间来回的时间我算错了10个人同时到达,肯定时间最短。 
    则可行的方法: 
    1-汽车载2个人,剩下的8个人步行同时出发 
    2-汽车到途中某地x,放下两人,设为ab,ab向前走,汽车回头接后面的8人中的2人,设为cd 
    3-接到cd,汽车向前开,遇到ab,放下cd,abcd4人向前走,汽车回头再去接两人 
    456........ 
    应该注意到,整个过程花费的时间为:x/40 + (100-x)/5。即汽车第一次放下ab两人的时间x/40  加上  ab两人从放下走到目的地的(100-x)/5时间! 
    而ab两人走到目的地的时间(100-x)/5里,汽车走了多远呢? 
    注意到,汽车每次回头接人,都是从前面的队伍,走到后面的队伍,再到前面的队伍。而这两个队伍间的距离,是恒定的!这个距离是多少呢?x - (x/8),即7x/8. 汽车回头接人4次,总共走了28x/8所花时间为(28x/8)/40   //所花时间不是这个,悲剧啊这个时间刚好等于ab两人从放下走到目的地的(100-x)/5时间! 
    所以有(28x/8)/40=(100-x)/5 
     
      

  25.   

    我刚好假设汽车一次接送就1个小时,所以/2刚好是一个接送周期,接的路程跟送的路程,你可以假设2小时为一个接送周期,那就不用除2了,5是人每小时的路程的速度,4是往返接送次数,怎么能除2。每次接送1小时,那么每次接送人走的距离就是5km,4次就是20km(注意,如果假设2小时接送,那么就应该×2),根据比例,一个小时送跟接的距离分别是22.5和17.5,那么取总距离20+22.5,时间是4小时+汽车走22.5km的时间,按比例放大到总距离100km,就可以得出最终答案 365/34