一个智力题,看看你聪明吗? 假设有一辆车,它的油箱恰好和一个油桶一样大,而且车上恰好可以装载一个桶。假设一桶油可以让车开100公里。现在在起点,车装满了油,另外起点还有100桶油。问:这车最远能离开起点多远?说明:汽车上最多带一个桶,不管这个桶里装了多少油,不能再带另外的空桶。桶中的油可以倒入油箱中,油箱中的油也可以倒入桶中。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 f_acme(沧海一声笑) 回答太傻瓜了。DelphiGuy() ( 的思路是正确的。大家继续,能做出答案吗/ 101 50 25 12 6 3 2 00 ----- 50km ------100km ----150km -----200km ----250km ----275km---475km 我的思路是这样的,请诛高手指正:每次花1桶的油,把所有的油桶搬到一个位置,然后再花一桶,搬到下一个位置,以此类推跑的最远~~~~~~~~~结合题目来说,因为刚开始起点有100桶油,车上能装1桶,因此需要搬运99桶,而且根据我的思想,是要花整整1桶油来搬运这99桶,不能多浪费,也不能少浪费。假设第一个搬运点离起点距离为x,那么则有如下方程:(99*2+1)x = 100 //搬99桶油要跑99个来回,因此是99*2,跑完这99个来回之后,汽车是停在起点的,因此还要再加1个x才能跑到摆放点。而所有这些消耗的油,加起来应该等于1桶,也就是100。因此可得到,第一个摆放点距离起点为100/199公里。换句话说,汽车已经前进了100/199公里了。然后根据算法,计算下一个摆放点离这个摆放点的距离,也就是汽车继续前进的距离。随着油桶的减少,搬运次数也会随之减少,因此相邻两摆放点之间的距离势必会越来越大,汽车也就越跑越远~~~~~~~~以上就是我的算法,程序高手可以写程序实现一下,我不会写程序,呵呵。 andycpp(幻瞳) 算发有漏洞浪费了汽油 没发挥油箱最大装油量比如 89桶汽油(车油箱是满的) 放到50公里处 方法1: 就是 1次消耗1桶送1桶 结果是50公里处有45桶油 车没油了方法2: 先运到25公里处 就是25公里处60桶汽油 车没油了再运到50公里处 结果是 40桶汽油 车没油了方法1 2 不同的就是 选择地点不同的阶段 可以把 汽油分为两种:1 被运送的汽油2 用来运送汽油的汽油(汽车消耗的油) 汽油2被运送的话 就会减少效率选的点 越多 效率减少越大 其实 这题本身就是 消耗汽油的一个过程(100桶汽油 一定跑不到一万公里)就看怎么消耗少 fosfree(见习听众) 的引爆汽油桶的想法好。。佩服一个先。 我的思路是这样的,请诛高手指正:每次花1桶的油,把所有的油桶搬到一个位置,然后再花一桶,搬到下一个位置,以此类推跑的最远~~~~~~~~~结合题目来说,因为刚开始起点有100桶油,车上能装1桶,因此需要搬运99桶,而且根据我的思想,是要花整整1桶油来搬运这99桶,不能多浪费,也不能少浪费。假设第一个搬运点离起点距离为x,那么则有如下方程:(99*2+1)x = 100 //搬99桶油要跑99个来回,因此是99*2,跑完这99个来回之后,汽车是停在起点的,因此还要再加1个x才能跑到摆放点。而所有这些消耗的油,加起来应该等于1桶,也就是100。因此可得到,第一个摆放点距离起点为100/199公里。换句话说,汽车已经前进了100/199公里了。然后根据算法,计算下一个摆放点离这个摆放点的距离,也就是汽车继续前进的距离。随着油桶的减少,搬运次数也会随之减少,因此相邻两摆放点之间的距离势必会越来越大,汽车也就越跑越远~~~~~~~~在起点应该会出现很多空桶得 不用搬 按照DelphiGuy() 的思想,可能需要近一百次的迭代吧!计算过程应该是很复杂的! 根据楼上所有各位的提示,我产生如下想法:最后一次肯定是200,耗油两桶,这个的证明只要费点时间好了。那么还有99桶如何耗才能最远?以99桶为初态,后面两桶不考虑。归结为如下数学表达式:假设在途中的任何两点a和b,在a点剩x桶油(初始为99),耗费i桶(i可以是1,2,3……,但不大于99)将其他的油运到b,a和b之间的路程为s,耗费99桶油所走的总的路为total(大家可以画下图,说的有点绕)。则:[ 2(x-i)-1 ] * s = 100 * i;//i桶油开100*i的路,这些路刚好是运x-i桶油到b点的路的总和。//若i=1就是andycpp(幻瞳) 的算法,但是i可以是2,3,乃至99由于可以多重循环,举例说就是先可以耗1桶将98桶搬到最远,然后再耗两桶将剩余的96桶搬到最远(也可以是任意的小于98的)……,所以问题很复杂,后果很严重。这样搞估计是NP问题了。但是我猜测应该是每次i都为1时搬最远,也就是andycpp(幻瞳) 的算法正确,我猜测应该可以证明,证明的方法是自然归纳法。也就是从1,1,1比1,2搬的更远(搬最后面的两桶)开始,然后while( 存在ix >1 )then 将 ix分成 1和(ix-1) 会搬的更远……我的数学不行,只是猜测而已。楼下达人继续,关注中…… lg(1/100)/lg(1/2)*50+200车装满油,载一桶油以后,能把这桶油载50公里放下再回来(来回共100公里刚好把油箱的油耗光)然后就可以在起点装满一桶油,又载一桶油到50公里处. 这样相当于要把油运到50公里处刚好需要耗一半的油.但是最后一趟不需要回到起点,因为所有油都装完了,这样最后一趟相当于少耗了50公里路程的油也就是1/2桶所以,第一次把所有油装到50公里处,剩下的油为102*(1/2)+1/2桶,这样算在在开始和结束时油的桶数都包括了车里面的油(开始时加上油箱里面的油,一共102桶,然后运50公里耗一半,还剩51桶,但是最后一趟油箱还剩了半桶,所以就是剩了102*(1/2)+1/2桶然后再把剩下的油运50公里,这次剩下的油又是一半再加上半桶,也就是(102*(1/2)+1/2)*(1/2)+1/2不停重复,每次都在前面的基础上乘1/2再加1/2,当最后到剩下两桶油的时候,不需要再运了,直接可以跑200公里所以(102*(1/2)+1/2)(1/2)+1/2.......=2化简得102*(1/2)^n+(1/2)^n+(1/2)^(n-1)+(1/2)^(n-2)+.....+1/2=2n就是跑得次数(跑了多少个50公里) 算出n=lg(1/100)/lg(1/2),用这个数乘以50,再加上最后的200就可以啦楼主,我的答案对不对呀 101 50 25 12 6 3 2 00 ----- 50km ------100km ----150km -----200km ----250km ----275km---475km 大家有没有算出500km的,或者大于500km的? 正解来了,可惜迟了点 :-(用VB写的:Sub test() Dim i Dim k k = 200 For i = 2 To 100 k = k + 100 / (2 * i - 1) Next Debug.Print kEnd Sub答案为:428.434218930163 楼主,偶只想到了500km的方法,大于500Km的要怎么弄哦? tiaoci(我挑刺,我快乐) 的思路很正确,要找到最远的距离。大家要考虑什么?总油量是一定的,折返的次数越少跑得就越远。 呵呵,被偶google到另外一个帖子,http://bbs.taisha.org/viewthread.php?tid=237877&extra=&page=1 哦,地址paste错了,应该是http://bbs.taisha.org/viewthread.php?tid=237877 (n+1)*n/2*X=100*102 min(n), max(X) 寻最优解 TO:milkbottle(奶瓶->好好学习,天天向上) youngmo1(小莫) 应该如下:101 50.5 25 12.5 6 3.5 2 00 ----- 50km ------100km ----150km -----200km ----250km ----300km---500km答案为:500km 我的算法有点偏激,请不要见怪按我的算法,能行驶多远还得开油桶的底直径、容量与堆放结构以及油在当地的挥发系数。设油桶直径为R,那么行驶距离R所需要用油为R/100,一桶油按这样的加油法能加 10000/R次(100桶油加1000000/R次)设实验当地油的挥发系数为I(min/L)、设每次加油需要S秒。设油箱的容积为L,那么油箱中的油的挥发后剩余总量为(L -(1000000*I/60*R))[(1000000*I/60*R)< L]那么总挥发油量为(1000000*I/60*R)+ ((1000000*I/60*R))。好,开始出发:车辆行驶距离R后,去最后一桶油加R/100,然后把这桶油放到油桶堆放位置的第一位。以次循环操作。那么车辆行驶的总距离是:1010000*L/R - 10000000I/3R^2所以在数学条件下,车辆理论上可以开10100公里。 希望高手可以用JAVA来计算出来题解因为我们在JAVA板块中... 设实验当地油的挥发系数为I(min/L)、设每次加油需要S秒。设油箱的容积为L,那么油箱中的油的挥发后剩余总量为(L -(1000000*I/60*R))[(1000000*I/60*R)< L]那么总挥发油量为(1000000*I/60*R)+ ((1000000*I/60*R))。------------------------great!你考虑得很周全,连挥发都考虑到了! 把所有的油看作是101桶,每桶100KM。1、每次只走50KM,把所有的油运到下一个点,这个时候剩50.5桶。2、类推,第二次再走50KM,剩25桶;3,第三次,50KM,剩12.5桶;4、第四次,50KM,剩6桶;5、第五次,50KM,剩3桶;6、第六次,50KM,剩1.5桶;7、走75KM总计:325KM这样好象比较浪费,总共浪费了1桶油,如果把每次走的路程缩短一点,没有浪费的话会更长 十分赞同 zhangkewang(旺旺) 的说法,最后剩两桶走200KM101 50.5 25 12.5 6 3.5 2 0 50 + 50+50+50+50+50+100+100=500KM 先简化一下,车加满油,起点有一桶油,可以跑多远?200公里。起点有两桶油呢?把一桶油搬出50公里,折返把另一桶油加满油箱?还是只能跑200公里。因此必须花油箱里一桶油的代价把两桶油往前搬。把两桶油搬到x*(2*2-1) = 100,x = 33.3公里的地方,这样能跑出233.3公里。三桶油呢?照上面的方法,把三桶油搬到x*(3*2-1) = 100,x = 20公里的地方,加满油,剩两桶,再按两桶油跑的距离,一共20+33.3+200=253.3公里,但这不是最优解,最优解是:把一桶油带出50公里,折返,地上一桶加满油箱,带上仅剩的一桶,开到50公里处,这时地上一桶油,车上一桶油,油箱里的油够跑50公里。按地上两桶油的跑法,把两桶油望前带x*(2*2-1) = 50,x = 16.6公里,然后就可以跑200公里了,一共50+16.6+200=266.6公里。所以按地上油桶奇偶数的不同,要采取不同的跑法。 public class TruckProblem { public static void main(String[] args) { double distance = 0; //初始距离 int petro = 100; //初始的100桶油 for (int i = petro; i > 0; i--) { distance += 100 / (petro + petro - 1); //每一桶油能把剩下的油搬运的距离 petro--; //油的数量减少1 } distance += 100; //最后油箱中的油可以跑100KM System.out.println("Distance : " + distance); }}参考了楼上兄弟的“一桶油能走多远”的思路,写成了这个程序,不知道逻辑对不对,欢迎大家拍砖。差点儿忘了,最后的距离是375公里,楼上有位兄弟已经说了。 X:第一次移动全部油后剩余的油Y:第一次移动全部油的路程 Y/100=100100/X-1 求X,Y的值都最大 我认为应该得500KM50桶 50KM;25桶 100KM;13桶 150KM;7桶 200KM;4桶 250KM;2桶 300KM直接走了。所以答案500KM。解决方案是根据古埃及的一道解牛的题:19只牛一个人分得1/2;一个人分得1/4;最后一人得1/5一般只需分就行了。但是只要把19分成1/2显然不可以的。这时古埃及人的解法是把19+1。这样就可以分了。按一般的分法越分应该越接近10、5、4的答案。所以我觉得应该得500KM不知道lz这是不是正解。欢迎各位朋友指正。谢谢 将终点定为A0,终点的前一个点为A1,依次类推,A2,A3,...起点为AnA1到A0间的距离为F1, 依次类推,F2, F3...FnA0----A1----A2----A3...An F1 F2 F3 ...1、很明显,当车到A2时,车上油箱为空,A2处有2桶油,F1为100,F2为100;2、A2处的2桶油,必须由A3处运到。 运送时必须走过的路程为A3->A2->A3->A2,即3*F3。 这个过程中共有两次是由A3出发,每次出发时油箱里加满油,又带一桶油,总共可以带4桶油(A3处要有四桶油),A2处留下两桶,剩下的2桶油跑了3*F3的路程,可计算出F3=200/3=66.7;3、同样,可以计算出A4处有8桶油,F4 = 400/7 = 57.14; A5处有16桶,F5 =800/15 = 53.33; A6处有32桶, F6 = 1600/31 = 51.61; A7处有64桶,F7 = 3200/63 = 50.79;4、起点(A8)有101桶,将64桶油由A8运至A7,F8 = (101-64)*100/(2*64-1) = 29.13 F1+...+F8 = 508.7 milkbottle(奶瓶->好好学习,天天向上) 应该是对的 先说一下这道题里的几个关键:1、搬到最后结果应该是车没油,地上剩两桶油,能跑出200公里。2、车里的油也算一桶,当油桶数是奇数的时候,花一桶油代价把另一桶油搬到50公里处是不划算的,例如剩3桶油,一桶加满油箱,带上一桶开到50公里处放下,回来,剩下的一桶正好加满油箱,这时车在起点,总油量是2桶,结果3桶油只能跑200公里。因此当油桶是奇数的时候,应该花一桶油的代价把剩下的油桶往前搬,设剩下的油桶数为n,搬的距离为x,则x*(2n-1)=100,x = 100/(2n-1),只所以减1是因为搬最后一桶油不需要返回了。3桶油耗一桶把剩下两桶搬到100/(2*2-1)=33.3公里处,能跑出233.3公里。3、油桶数是偶数,应该耗一桶油把另一桶油搬到50公里处,把所有油桶搬到位,车里是还剩50公里的油量的,因为不需要返回。4、按3的规则,例如剩6桶油,搬出50公里是剩3.5桶油,这个.5也算一桶油,因此油桶数还是偶数,仍然按3的规则搬,不过搬到位车里已经没油了。6->3.5->2按以上规则:公里数: 100/199=0.5 50 50/99=0.5 50油桶数:101 100 50.5 50 25.5剩25.5桶油的时候有个分歧,是花1.5桶油的代价把24桶油往前搬还是把13桶油搬出50公里,分别算一下:1.5桶油搬24桶:公里数: |150/47=3.19|50 |50/23=2.17|50 |50/11=4.54|50 |50|200油桶数:25.5|24 |12.5|12 |6.5|6 |3.5|2 |搬出50公里:公里数: |50|100/23=4.34|50 |50/11=4.54|50 |50|200油桶数:25.5|13|12 |6.5|6 |3.5|2最后最大值是:0.5+50+0.5+50+3.19+50+2.17+50+4.54+50+50+200 = 510.9公里由于25.5桶油的分歧,我觉得这可能还不是最优解,期望有人能算出跑得更远的方法。 SWT-Desinger中的Swing Layout的werticle glue有什么用,怎么用? 关于java下载文件的问题 关闭jfreechart整个软件就跟着也关了。。。 全球前十强,年薪15万的面试题 求毕设题目。 jar文件可以加密么? RMI中,只要一旦将某名字与接口实现bind上,是不是就一直能够用这个接口呢? 正则表达式到底咋回事? ireport报表请高手解答,急、~~~~~~~~~~~~~~~~在线等 请教系统权限解决方案 怎么使用JAVA代码来查看基本类型所占内存的大小??即多少BIT??我想用程序来看看。 java里能不能使用单向链表
每次花1桶的油,把所有的油桶搬到一个位置,然后再花一桶,搬到下一个位置,以此类推跑的最远~~~~~~~~~
结合题目来说,因为刚开始起点有100桶油,车上能装1桶,因此需要搬运99桶,而且根据我的思想,是要花整整1桶油来搬运这99桶,不能多浪费,也不能少浪费。
假设第一个搬运点离起点距离为x,那么则有如下方程:
(99*2+1)x = 100 //搬99桶油要跑99个来回,因此是99*2,跑完这99个来回之后,汽车是停在起点的,因此还要再加1个x才能跑到摆放点。而所有这些消耗的油,加起来应该等于1桶,也就是100。
因此可得到,第一个摆放点距离起点为100/199公里。换句话说,汽车已经前进了100/199公里了。然后根据算法,计算下一个摆放点离这个摆放点的距离,也就是汽车继续前进的距离。随着油桶的减少,搬运次数也会随之减少,因此相邻两摆放点之间的距离势必会越来越大,汽车也就越跑越远~~~~~~~~以上就是我的算法,程序高手可以写程序实现一下,我不会写程序,呵呵。
方法1: 就是 1次消耗1桶送1桶 结果是50公里处有45桶油 车没油了
方法2: 先运到25公里处 就是25公里处60桶汽油 车没油了
再运到50公里处 结果是 40桶汽油 车没油了方法1 2 不同的就是 选择地点
不同的阶段 可以把 汽油分为两种:
1 被运送的汽油
2 用来运送汽油的汽油(汽车消耗的油)
汽油2被运送的话 就会减少效率
选的点 越多 效率减少越大
其实 这题本身就是 消耗汽油的一个过程(100桶汽油 一定跑不到一万公里)
就看怎么消耗少
每次花1桶的油,把所有的油桶搬到一个位置,然后再花一桶,搬到下一个位置,以此类推跑的最远~~~~~~~~~
结合题目来说,因为刚开始起点有100桶油,车上能装1桶,因此需要搬运99桶,而且根据我的思想,是要花整整1桶油来搬运这99桶,不能多浪费,也不能少浪费。
假设第一个搬运点离起点距离为x,那么则有如下方程:
(99*2+1)x = 100 //搬99桶油要跑99个来回,因此是99*2,跑完这99个来回之后,汽车是停在起点的,因此还要再加1个x才能跑到摆放点。而所有这些消耗的油,加起来应该等于1桶,也就是100。
因此可得到,第一个摆放点距离起点为100/199公里。换句话说,汽车已经前进了100/199公里了。然后根据算法,计算下一个摆放点离这个摆放点的距离,也就是汽车继续前进的距离。随着油桶的减少,搬运次数也会随之减少,因此相邻两摆放点之间的距离势必会越来越大,汽车也就越跑越远~~~~~~~~在起点应该会出现很多空桶得 不用搬
计算过程应该是很复杂的!
最后一次肯定是200,耗油两桶,这个的证明只要费点时间好了。
那么还有99桶如何耗才能最远?以99桶为初态,后面两桶不考虑。归结为如下数学表达式:
假设在途中的任何两点a和b,在a点剩x桶油(初始为99),耗费i桶(i可以是1,2,3……,但不大于99)将其他的油运到b,a和b之间的路程为s,耗费99桶油所走的总的路为total(大家可以画下图,说的有点绕)。
则:
[ 2(x-i)-1 ] * s = 100 * i;//i桶油开100*i的路,这些路刚好是运x-i桶油到b点的路的总和。
//若i=1就是andycpp(幻瞳) 的算法,但是i可以是2,3,乃至99
由于可以多重循环,举例说就是先可以耗1桶将98桶搬到最远,然后再耗两桶将剩余的96桶搬到最远(也可以是任意的小于98的)……,所以问题很复杂,后果很严重。这样搞估计是NP问题了。
但是我猜测应该是每次i都为1时搬最远,也就是andycpp(幻瞳) 的算法正确,我猜测应该可以证明,证明的方法是自然归纳法。
也就是从1,1,1比1,2搬的更远(搬最后面的两桶)开始,然后
while( 存在ix >1 )
then 将 ix分成 1和(ix-1) 会搬的更远……我的数学不行,只是猜测而已。
楼下达人继续,关注中……
车装满油,载一桶油以后,能把这桶油载50公里放下再回来(来回共100公里刚好把油箱的油耗光)
然后就可以在起点装满一桶油,又载一桶油到50公里处. 这样相当于要把油运到50公里处刚好
需要耗一半的油.
但是最后一趟不需要回到起点,因为所有油都装完了,这样最后一趟相当于少耗了50公里路程的油
也就是1/2桶
所以,第一次把所有油装到50公里处,剩下的油为102*(1/2)+1/2桶,这样算在在开始和结束时油的桶数都包括了车里面的油(开始时加上油箱里面的油,一共102桶,然后运50公里耗一半,还剩51桶
,但是最后一趟油箱还剩了半桶,所以就是剩了102*(1/2)+1/2桶
然后再把剩下的油运50公里,这次剩下的油又是一半再加上半桶,也就是(102*(1/2)+1/2)*(1/2)+1/2
不停重复,每次都在前面的基础上乘1/2再加1/2,当最后到剩下两桶油的时候,不需要再运了,直接可以跑200公里
所以(102*(1/2)+1/2)(1/2)+1/2.......=2
化简得102*(1/2)^n+(1/2)^n+(1/2)^(n-1)+(1/2)^(n-2)+.....+1/2=2
n就是跑得次数(跑了多少个50公里) 算出n=lg(1/100)/lg(1/2),用这个数乘以50,再加上最后的200就可以啦
楼主,我的答案对不对呀
用VB写的:
Sub test()
Dim i
Dim k
k = 200
For i = 2 To 100
k = k + 100 / (2 * i - 1)
Next
Debug.Print k
End Sub答案为:428.434218930163
http://bbs.taisha.org/viewthread.php?tid=237877&extra=&page=1
min(n), max(X) 寻最优解
应该如下:
101 50.5 25 12.5 6 3.5 2 00 ----- 50km ------100km ----150km -----200km ----250km ----300km---500km答案为:500km
设油桶直径为R,那么行驶距离R所需要用油为R/100,一桶油按这样的加油法能加 10000/R次(100桶油加1000000/R次)
设实验当地油的挥发系数为I(min/L)、设每次加油需要S秒。
设油箱的容积为L,那么油箱中的油的挥发后剩余总量为(L -(1000000*I/60*R))[(1000000*I/60*R)< L]
那么总挥发油量为(1000000*I/60*R)+ ((1000000*I/60*R))。好,开始出发:
车辆行驶距离R后,去最后一桶油加R/100,然后把这桶油放到油桶堆放位置的第一位。以次循环操作。
那么车辆行驶的总距离是:1010000*L/R - 10000000I/3R^2
所以在数学条件下,车辆理论上可以开10100公里。
因为我们在JAVA板块中...
设油箱的容积为L,那么油箱中的油的挥发后剩余总量为(L -(1000000*I/60*R))[(1000000*I/60*R)< L]
那么总挥发油量为(1000000*I/60*R)+ ((1000000*I/60*R))。
------------------------
great!你考虑得很周全,连挥发都考虑到了!
1、每次只走50KM,把所有的油运到下一个点,这个时候剩50.5桶。
2、类推,第二次再走50KM,剩25桶;
3,第三次,50KM,剩12.5桶;
4、第四次,50KM,剩6桶;
5、第五次,50KM,剩3桶;
6、第六次,50KM,剩1.5桶;
7、走75KM
总计:325KM这样好象比较浪费,总共浪费了1桶油,如果把每次走的路程缩短一点,没有浪费的话会更长
101 50.5 25 12.5 6 3.5 2 0
50 + 50+50+50+50+50+100+100=500KM
起点有两桶油呢?把一桶油搬出50公里,折返把另一桶油加满油箱?还是只能跑200公里。
因此必须花油箱里一桶油的代价把两桶油往前搬。把两桶油搬到x*(2*2-1) = 100,x = 33.3公里的地方,这样能跑出233.3公里。
三桶油呢?照上面的方法,把三桶油搬到x*(3*2-1) = 100,x = 20公里的地方,加满油,剩两桶,再按两桶油跑的距离,一共20+33.3+200=253.3公里,但这不是最优解,最优解是:
把一桶油带出50公里,折返,地上一桶加满油箱,带上仅剩的一桶,开到50公里处,这时地上一桶油,车上一桶油,油箱里的油够跑50公里。按地上两桶油的跑法,把两桶油望前带x*(2*2-1) = 50,x = 16.6公里,然后就可以跑200公里了,一共50+16.6+200=266.6公里。
所以按地上油桶奇偶数的不同,要采取不同的跑法。
public static void main(String[] args) {
double distance = 0; //初始距离
int petro = 100; //初始的100桶油
for (int i = petro; i > 0; i--) {
distance += 100 / (petro + petro - 1); //每一桶油能把剩下的油搬运的距离
petro--; //油的数量减少1
}
distance += 100; //最后油箱中的油可以跑100KM
System.out.println("Distance : " + distance);
}
}
参考了楼上兄弟的“一桶油能走多远”的思路,写成了这个程序,不知道逻辑对不对,欢迎大家拍砖。
差点儿忘了,最后的距离是375公里,楼上有位兄弟已经说了。
Y:第一次移动全部油的路程
Y/100=100100/X-1
求X,Y的值都最大
50桶 50KM;25桶 100KM;13桶 150KM;7桶 200KM;4桶 250KM;2桶 300KM直接走了。所以答案500KM。解决方案是根据古埃及的一道解牛的题:19只牛一个人分得1/2;一个人分得1/4;最后一人得1/5
一般只需分就行了。但是只要把19分成1/2显然不可以的。这时古埃及人的解法是把19+1。这样就可以分了。按一般的分法越分应该越接近10、5、4的答案。所以我觉得应该得500KM不知道lz这是不是正解。欢迎各位朋友指正。谢谢
A1到A0间的距离为F1, 依次类推,F2, F3...Fn
A0----A1----A2----A3...An
F1 F2 F3 ...1、很明显,当车到A2时,车上油箱为空,A2处有2桶油,F1为100,F2为100;
2、A2处的2桶油,必须由A3处运到。
运送时必须走过的路程为A3->A2->A3->A2,即3*F3。
这个过程中共有两次是由A3出发,每次出发时油箱里加满油,又带一桶油,总共可以带4桶油(A3处要有四桶油),A2处留下两桶,剩下的2桶油跑了3*F3的路程,可计算出F3=200/3=66.7;
3、同样,可以计算出A4处有8桶油,F4 = 400/7 = 57.14;
A5处有16桶,F5 =800/15 = 53.33;
A6处有32桶, F6 = 1600/31 = 51.61;
A7处有64桶,F7 = 3200/63 = 50.79;
4、起点(A8)有101桶,将64桶油由A8运至A7,F8 = (101-64)*100/(2*64-1) = 29.13 F1+...+F8 = 508.7
1、搬到最后结果应该是车没油,地上剩两桶油,能跑出200公里。
2、车里的油也算一桶,当油桶数是奇数的时候,花一桶油代价把另一桶油搬到50公里处是不划算的,例如剩3桶油,一桶加满油箱,带上一桶开到50公里处放下,回来,剩下的一桶正好加满油箱,这时车在起点,总油量是2桶,结果3桶油只能跑200公里。因此当油桶是奇数的时候,应该花一桶油的代价把剩下的油桶往前搬,设剩下的油桶数为n,搬的距离为x,则x*(2n-1)=100,x = 100/(2n-1),只所以减1是因为搬最后一桶油不需要返回了。3桶油耗一桶把剩下两桶搬到100/(2*2-1)=33.3公里处,能跑出233.3公里。
3、油桶数是偶数,应该耗一桶油把另一桶油搬到50公里处,把所有油桶搬到位,车里是还剩50公里的油量的,因为不需要返回。
4、按3的规则,例如剩6桶油,搬出50公里是剩3.5桶油,这个.5也算一桶油,因此油桶数还是偶数,仍然按3的规则搬,不过搬到位车里已经没油了。6->3.5->2按以上规则:
公里数: 100/199=0.5 50 50/99=0.5 50
油桶数:101 100 50.5 50 25.5剩25.5桶油的时候有个分歧,是花1.5桶油的代价把24桶油往前搬还是把13桶油搬出50公里,分别算一下:
1.5桶油搬24桶:
公里数: |150/47=3.19|50 |50/23=2.17|50 |50/11=4.54|50 |50|200
油桶数:25.5|24 |12.5|12 |6.5|6 |3.5|2 |搬出50公里:
公里数: |50|100/23=4.34|50 |50/11=4.54|50 |50|200
油桶数:25.5|13|12 |6.5|6 |3.5|2最后最大值是:0.5+50+0.5+50+3.19+50+2.17+50+4.54+50+50+200 = 510.9公里由于25.5桶油的分歧,我觉得这可能还不是最优解,期望有人能算出跑得更远的方法。