首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

面试题:火车运煤有关问题

2012-07-27 
面试题:火车运煤问题你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市

面试题:火车运煤问题
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?









[解决办法]
这是理解方式的问题

你的意思是驴必须一次穿越1000公里,那样就真的回不来了

如果路程是一部分一部分走,是能带萝卜出沙漠的,可以看下面的示意图,

⑤⑤③③③①①①①①

这一串数字表示整个路程,其中:

⑤表示须走五趟的路。
往返2次共四趟,第3次过去就不返回了,共五趟。
计算后最佳距离为200公里、消耗1000根萝卜,即剩下800公里路程、2000根萝卜;
③表示须走三趟的路。
往返1次共两趟,第2次过去就不返回了,共三趟。
计算后最佳距离为333公里、消耗999根萝卜,即剩下467公里路程、1001根萝卜;
①表示只须走一趟的路。
过去就不返回了,共一趟。
一次驼1000根直接越过剩下的路程。
注:这里扔掉了一根萝卜,或者商人吃掉了一根,反正不需要为了一根萝卜,再返回了。

楼主看看 把驴子换成火车 萝卜换成煤
[解决办法]
骆驼吃香蕉的问题

主要解决思路: 
①骆驼先载上1000个香蕉 走到某一处,然后放一些香蕉在路上某处。
再带上一些香蕉 边走边吃返回到起点 
②重复上述过程,直到还剩余香蕉全部都搬运到路上某处.
③最后重复①②过程

现在的问题就出现了 走到某处? 到底走到哪里呢?
一开始,有3000个香蕉 那么在通往终点的方向上的同一段路 要走3次
该段路程反方向要走2次
如果只剩了2000个香蕉 那么在通往终点的方向上的同一段路 要走2次
该段路程反方向要走1次

很显然 可以用剩余香蕉的数量来分隔。

从3000个香蕉到刚好剩余2000个香蕉 
消耗了1000个香蕉(骆驼行走路程为1000m)
在同一段路要走3+2=5 次
那么这段路只有 1000/5=200m 此时走过200m 剩余1000个香蕉

从2000个香蕉到1000个 
又消耗了1000个香蕉(骆驼行走路程为1000m)
根据上述推论 在在同一段路要走1+2=3 次
那么又走过1000/3=333.3m

最后剩余1000个
距离终点只有1000-200-333.3=466.7m
那么只用消耗467个香蕉
最后剩余1000-467=533个香蕉

见http://cart55free99.blog.163.com/blog/static/853598512010111574812417/
[解决办法]
蛋疼算了一下极限,也就是假设起点有无限吨煤

那么能运到的就是1000*(1/3+1/5+1/7+.....+1/(2n+1))

设数列
Sn=1/3+1/5+1/7+.....+1/(2n+1)
S1=1/2+1/4+1/6+1/8+.....+1/2n

取欧拉常数γ=0.5772
显然Sn+S1+1就是调和数列的和——0.5772+ln(n)
而S1*2也是调和数列

解得Sn=ln(n)/2-0.7139
这是一个发散数列

总之结论就是可以运送无限多的煤到目的地。
[解决办法]

探讨

答案是:555.5555555555……。
我来分析哈:
从题中可以看出一次不可能运到目的地。
所以中间要返回。
第一次出去并返回:必须是要运到最远 设X1;
1000-x1-x1-x1=0 => x1=1000/3
解释哈第一个x1是每走一段要用的煤,第二个是回来要用的煤,第三个是留在路上的煤。供下次火车再来使用。回来的时候车上干好是空的。
第二次一样装最多的煤,运往最远在第一……

热点排行