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小时(划算损耗不计哦 还有人上车耽搁的掉头所用时间也不计哦)
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 不知道对不 发错号啦 嘿嘿
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 修改一下
Debug.Print a / 4 + (100 - a) / 40(设汽车往返4次后人走的路程为a)
应该可以用递归,不过不知道有什么巧算。
假设全部到达花费时间是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
解方程去,嘿嘿
{
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
{
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小时
设An表示,人车第n次相遇所经过的时间,并设定启动是为第一次相遇
则可以已知: A1=0
Sn=A1+A2+.....+An
An=2(100-5*Sn-1)/45求 S5 + (100-5*S5)/40
提示:先求An
好了,高中生的题目。
{
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);
}
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);
}
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);
}
你这个肯定是错的
var usetime=100/40。。
第一次车肯定不能把人送到终点。
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);
}
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小时(划算损耗不计哦 还有人上车耽搁的掉头所用时间也不计哦)
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
不知道对不 发错号啦 嘿嘿
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
修改一下
甲地有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
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等软件就更方便了。
具体数值懒得画了。
人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 的最小值 我的观点
则有等式 (100-40t)/5 /4=2*35t / 40得 t=4/3总时间 =4/3 + (100-40*4/3)/5=10.667
正如前面的朋友所说的,最理想的情况是,车在离终点不远处,将人放下。然后回去接路上的人。并且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呵呵,应该没错吧,请高手指点。
52.9411/40=1.3235
(100-52.9411)/5=9.4117time=10.7352
两人间距路程40T-5T=35T
汽车接人时间 35T/(40+5)
汽车送人时间 35T/(40-5)
车要往返4次
则(100-40T)/5 = (35T/(45)+35T/(35))*4结果约等于10.74
则可行的方法:
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
总时间为x/40 + (100-x)/5
笔算好像是180/23
前面有误哦...
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