生活小趣味-火车运煤

周末闲来无事,看到一个很有意思的题目,题目是这样的,假设你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大-每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?话说煤老板这年头过的也不是很容易,不过相比程序员来说,还是煤老板享受的机会比我等程序员要好很多~题目看起来很无解,网上也很多人给出了答案和自己的分析过程,能力有限,没有想到最优解,看到有的人给了最优的方式,大致的分享一下自己的思考过程吧。

常见思考方式

本人只想到最常见的思考方式,题目看起来是无解,就是火车一次性运煤到市区基本是空车到市区,没有任何返回,这个时候我想的是能不能中途停留一下,比如说拉到500公里处,拉到之后再回去的拉剩下的煤基本上也是空车,接下来思考的方式就不走那么远,第一次走250公里,可以卸载500吨煤,第二次拉1000吨煤,从250公里处拉到500公里处,卸载500吨煤,第三次拉1000吨煤,然后在500公里处将煤都装上,到达终点处还有500吨煤;这就是我这个懒人能想到的最佳思考方式了,一般来说大家想想都应该没什么问题~那么问题来了,这个究竟不是最佳的思考的方式了,所以最优的结果还是需要验证一下的~

数学思考方式

网上有的人写的很速度,简单点就是中间有两个补给点,第一个补给点1000/5=200,第二个补给点1000/3=333,最后在200+333公路处有1000吨煤,最后剩余的是533吨煤。

上面说的很简单,看完之后我的第一感觉,为毛大家数学都这么好,为什么上来就知道是五次,第二个补给点是三次,不过思考了一阵子之后感觉差不多明白看了意思,假设起点是A,终点是 B:

首先有个隐形条件就是火车煤走一公里需要消耗一吨煤,为了保证最大的到货量,每次肯定是满车走,装满1000吨,现在又3000吨煤,所以最优的办法肯定是只需要拉三次,火车最大的载重是1000吨,相当于在最后一个地点离终点的距离越近,那么最终剩下的煤越多,起始点A有3000吨,最后一站C需要1000吨,那么由此需要一个中间点B点:

 ------------------------3------------------------->

 ---------------2--------------->

  ----1---> 

A--------->B--------------->C---------------->D

<------1----

<--------------------2-----------

通过上图可以很容易理解一个问题就是其实就从起始点A到B一次,从A到C一次,从A到D一次,每次1000吨,最终到达终点站:

AB+BC+CD=1000

5AB≥1000

3BC≥1000

CD=1000-AB-BC,CD越短剩下的煤越多,那么很显然AB,BC去临界值,AB=200,BC≈333,最后在D处还有533吨煤;

如果不需要B点,5次直接运到C也可行,5AC≥2000,AC为400,最后的最多剩余的煤为400吨~

个人周末一点个人分析的文章,如果有什么不当的地方,忘大家多包涵~

时间: 2024-09-29 09:46:08

生活小趣味-火车运煤的相关文章

类Runtime和火车运煤问题

1 类Runtime 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.可以通过 getRuntime 方法获取当前运行时. 应用程序不能创建自己的 Runtime 类实例. 2 火车运煤问题 问题来源:http://coolshell.cn/articles/4429.html/comment-page-5#comments 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车

经典智力题:火车运煤

题目描述如下: 你是一个煤老板,你在矿区开采了3000吨煤,需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列以煤为动力的火车,这个火车一次最多能运1000吨煤,火车每公里消耗一吨煤.问如何运送才能运最多的煤到集市? ========== -.- ========== 思考时间 ========== -.- ========== 从题中很容易能看出一个矛盾:路程是1000公里,最多运1000吨煤,显然不能直接走.如果直接走的话,不仅没有煤能送过去,而且还会剩下一大堆煤在原地.所以

火车运煤问题

题目: 煤矿有 3000 吨煤要拿到市场上卖,有一辆火车可以用来运煤,火车最多能装 1000 吨煤,且火车本身需要烧煤做动力,每走 1 公里消耗 1 吨煤,如何运煤才能使得运到市场的煤最多,最多是多少? 分析: 设出发点为 A ,终点为 B,火车一定不能一下子就从 A 跑到 B,这样就 B 时刚好什么也没剩下.到中点也不行,因为到中点后再回到 A,刚好把自己带的煤全部用完,只烧煤不干活!那到底要走多远返回合适呢? 我们可以倒着推理,最后一次火车到 B 点的最好情况是火车从 A B 之间的某点带

练手小项目(2)-生活小助手--星座运势查询

上一篇内容 练手小项目(2)-生活小助手 今天星期一.趁着中午的歇息时间把 第二个写出来 星座运势,近期看看极客学院 用聚合数据做了天气预报的视频教程,不好评价他.看他在后面的代码变更那么大,我就知道,后面肯定做不下去,于是.就改代码了.代码变更那么大,有几个人会去理解,还不如我自己写................ 先看布局 点击去就是一个spinner 用几个textview显示查询内容   布局有点丑,主要是给别人做功能,UI我就不考虑 关于UI  我还是要贴下代码.假设你有想法就把他美化

生活小趣味-简单抽奖

路过商场,看过抽奖感觉挺有意思的,商场进行抽奖活动,三个奖项,一等奖的概率1/10,二等奖的概率的3/10,三等奖的概率是6/10,具体奖品我没仔细看,回来随便练手了一下,思考了一下,奖品分为10份,生成一个随机数,如果0-5则是三等奖,6-8是二等奖,9是一等奖,简单实现如下: int randomNumber=arc4random()%10; if (randomNumber>=0&&randomNumber<=5) { [self alert:@"恭喜你获得三等

练手小项目(2)-生活小助手--周公解梦

第一篇 练手小项目(2)-生活小助手--身份证查询 第二篇 练手小项目(2)-生活小助手--星座运势查询 我在想就是第三个药品查询要不要写出来,因为布局还在讨论用什么展示,因为药品有很多展示,我也不知道用什么展示. 这是一个很纠结的事情 我就先写第四个吧 周公解梦 其中代码有点错误我想用for循环进行判断返回数据有几个 但是总是失败,如果有看本篇贴子,解决了,给我留个言,在这篇帖子我只显示一个结果 布局跟简单的说 一个Edittext 获取数据,然后button进行数据提取发送到服务器 返回的数

【生活小技巧】存放衣物防皱的小妙招

生活中知道一些生活小技巧,不但可以节约时间,还可以更快的做好生活中的锁事,让生活效率大大提高,也让生活更有情调,生活更有趣味,在这里意空间主编把42个超实用的生活小技巧与妙招分享给大家. 1.毛巾发粘有怪味怎么办? 毛巾使用久了,会散发一种怪味而且发粘.通常人们习惯用肥皂洗涤,反而越洗越粘.此时,可用浓盐水搓洗(一条毛巾可放一小勺细盐),然后用温水烫一下再搓洗,最后用清水洗净.这样,毛巾就没有怪味,也不发粘.还有,擦脸毛巾用久想恢复到柔软的样子,最好的办法是用水加洗衣粉用锅煮三十分钟即可. 2.

15个实用生活小窍门

1.[生活窍门:糕点的保存]保存糕点时,可在贮藏糕点的密封容器里加1片新鲜的面包,当面包发硬时,再及时更换一块新鲜的,这样糕点能保鲜较长时间. 2.[生活窍门]画眼线的小技巧:要画好一双细致的眼线,可以先把手肘固定在桌上,然后平放一块小镜子,让双眼朝下望向镜子,就可以放心描画眼线了. 3721健康网( 3.[生活窍门]电视机或电脑着火时,先拔掉插头或关上总开关,再用毯状物扑灭火焰.切勿用水或灭火器救火,因机体内可能仍有残余电力,会引致电击. 3721健康网( 4.[生活窍门]在粮食中放少量干海带

这些生活小绝招对健康有益哦

中医观点:都市生活越来越快,工作压力越来越大,饮食不健康,垃圾食品越来越多,外界辐射也让你防不胜防.中医认为:长寿贵在养生,养生贵在坚持.所以掌握好一些生活每天都会做到的小习惯是必不可少的.下面就看一下小编为您推荐的15个生活小绝招,希望您能永远健康长寿. 1.复合维生素早饭后吃 研究表明,补充适合自己的复合维生素对身体健康大有裨益.那么,为什么要在早饭后吃呢?一来它可以提供人体一天所需,让你有精力投入工作学习,二来不至于给肾脏造成过大负担. 2.每餐之前喝两杯水 这样做就能保持身体一直处于"水