问一道小学数学题
- ph_d小学学而思里的 iOS fly ~
- aiki3066几年级的?
感觉这种题目思考起来挺费劲的。。 - 99123
- b0207191复制代码
- 某夜,有个团伙要过桥,该桥每次只能通行2个人,只有一个手电筒,过桥必须持有手电筒。这些人单独过桥的时间从小到大分别为t1、t2、t3、t4、t5 ………
- 请写程序计算出这伙人过桥需要的最短时间。
- (提示:假设是四人,如果t1=1,t2=2,t3=5,t4=10,最短用时为17)
- 昨天公司领导出了上面逻辑题,看着挺有意思,自己初略思索了下,琢磨最短用时应该19才是,后面某一同事提了个方案:
- t1t2一起过,t1回来,t3t4过去,t2回来t1t2过去,最短用时确实17,此处完美利用两个最长时t3和t4一起过河,t1和t2作为回桥递送手电筒而节省时间差,方法挺巧妙有点意思,但当时总感觉此法还有点欠考虑。
- 后来下班地铁上无聊思索致此事,心里嘀咕如果t1和t2相差很大,这种借助t2回传,应该肯定没t1做回传效率高才是。。。
- 晚上哄着小宝差不多睡着时,捧着手机看到群里有同事讨论此题的编程,心头一热乎,拿着笔和纸验证了下前面的顾虑,当t1=1,t2=8,t3=9,t4=10,最短用时应该是29而不是35,嘿!越来越有点意思,于是乎继续思考:
- 方式1,t1作为来回传递手电筒,总耗时s1=t2+t1+t3+t1+t4
- 方式2,借助t1和t2,将t4和t3送过桥的方式,总耗时s2=t2+t1+t4+t2+t2
- 当s2<s1时,也就是2*t2<t1+t3,采用方式2过桥时间最短,否则方式1更佳!
- 后来公司领导说,如果推广到5个、N个。。。
- 心理嘀咕了下,方式2的方式其实是通过t1和t2将最慢的两人t3和t4送过桥而耗时最短,所以理论上不管4个5个还是N个,通过上面的逻辑判断,应该都能做到推广吧,有点晚也就没去验证了。
- 今早看群里还有同事讨论此事,于是乎自己也感兴趣拿着之前同事群里发的代码做了下修改:
- function across_time(args){
- var ret = 0;
- var _tmp = args.sort(function(a,b){return a-b;});
- console.log(_tmp);
- if (args.length < 3)
- {
- ret = Math.max(args[0]||0,args[1]||0);
- return ret;
- }
- if (_tmp.length == 3) {
- ret = _tmp[1] + _tmp[0] + _tmp[2];
- console.log(ret);
- return ret;
- }
- for(var i=_tmp.length-1;i>0;i=i-2){
- if (i >= 3) {
- if (2 * _tmp[1] <= _tmp[0] + _tmp[i]) {
- ret += _tmp[1] + _tmp[0] + _tmp[i] + _tmp[1] ;
- } else {
- ret += _tmp[i] + _tmp[0] + _tmp[i - 1] + _tmp[0];
- }
- }else{
- for (var j = i; j > 0; j--) {
- ret += _tmp[j];
- }
- if (i % 2 == 0) {
- ret += _tmp[0];
- }
- }
- }
- console.log(ret);
- return ret;
- }
- 验证了下群里同事发的几组数据,应该没啥问题,编程的乐趣源于思考的过程并从中发现乐趣!
- 以上仅是个人见解,也许也有问题,欢迎讨论
- 测试demo
- ————————————————
- 版权声明:本文为CSDN博主「zb872676223」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- 原文链接:https://blog.csdn.net/zb872676223/article/details/80205953
- 某夜,有个团伙要过桥,该桥每次只能通行2个人,只有一个手电筒,过桥必须持有手电筒。这些人单独过桥的时间从小到大分别为t1、t2、t3、t4、t5 ………
- richzz这个描述有歧义吧,我理解成最后4条船同时触岸了😓
- jiuzhege1每次同时过去2条,但1条要返回。
题都不能说清楚 - 水森活这种题目看的头晕也叫我儿子做一下。