看到一个小学四年级的数学题,说是一共4个人过桥,分别单独过桥用时3,4,6,9分钟,该桥每次只能过两个人,且每次过去之后必须要一个人回去接人,问四个人全部过去的最短时间。

真实题目确实很长,我不知道小学生遇到这个问题能否耐心读完读懂该问题。

所以我觉得题目确实蛮有意思的,有点脑筋急转弯的感觉。

如果静下心来解决,用排除法也能很快得到答案。

另外用Javascript穷尽法也能得到答案,网上还有人问js怎么写。

能力有限,用的比较死板的解决办法,应该有大神有更好的解决办法。

/// <reference path="jquery-1.10.2.js" />
$(document).ready(function () {$('#CrossBridge').html();HowToCrossBridge(3, 4, 6, 9);
});/**
//console.log("第一次过桥由" + firstGo1 + "和" + firstGo2 + "过,共计" + firstGo2 + "分钟");
//document.writeln("第一次过桥由" + firstGo1 + "和" + firstGo2 + "过,共计" + firstGo2 + "分钟");知识点:1.数组的copy 注意区分深拷贝和浅拷贝array.slice(0)以及array.concat()2.数组的remove和push以及sort
**/
function HowToCrossBridge(a, b, c, d) {var totalTime1 = 0;var breakFlag = true;var str1 = "";var count = 0;var minTime = 0;var minStr = "";//while (breakFlag) {//totalTime1 = 0;var waitingCross = [a, b, c, d];var hadCrossed = new Array();waitingCross = waitingCross.sort(function (a, b) { return a - b });//按顺序从小到大排序//第一次过桥(过去2人,剩余2人)for (var i = 0; i < 4; i++) {for (var j = i + 1; j < 4; j++) {//count += 1;totalTime1 = 0;var hadCrossed1 = hadCrossed.concat();var waitingCross1 = waitingCross.concat();var firstGo1 = waitingCross1[i];var firstGo2 = waitingCross1[j];totalTime1 = totalTime1 + firstGo2;str1 = "<p>第一次过桥由" + firstGo1 + "和" + firstGo2 + "过,共计<fond style='color:red'>" + firstGo2 + "</fond>分钟,合计<fond style='color:red'>" + totalTime1 + "</fond>分钟</p>";//移除等待过桥人员waitingCross1.remove(firstGo1);waitingCross1.remove(firstGo2);waitingCross1.sort(function (a, b) { return a - b });//添加已过桥人员hadCrossed1 = [firstGo1, firstGo2];hadCrossed1.sort(function (a, b) { return a - b });str1 += "<p>第一次过桥后 hadCrossed=" + hadCrossed1.join() + " waitingCross=" + waitingCross1.join() + "</p>";//第二次返回(过去1人,剩余3人)for (var k = 0; k < 2; k++) {//count += 1;var hadCrossed2 = hadCrossed1.concat();var waitingCross2 = waitingCross1.concat();var str2 = str1;var totalTime2 = totalTime1;var secondBack = hadCrossed2[k];totalTime2 = totalTime2 + secondBack;str2 += "<p>第二次返回由" + secondBack + "过,共计<fond style='color:red'>" + secondBack + "</fond>分钟,合计<fond style='color:red'>" + totalTime2 + "</fond>分钟</p>";//添加等待过桥人员waitingCross2.push(secondBack);waitingCross2.sort(function (a, b) { return a - b });//移除已过桥人员hadCrossed2.remove(secondBack);hadCrossed2.sort(function (a, b) { return a - b });str2 += "<p>第二次返回后 hadCrossed=" + hadCrossed2.join() + " waitingCross=" + waitingCross2.join() + "</p>";//第三次过桥(过去3人,剩余1人)for (var m = 0; m < 3; m++) {for (var n = m + 1; n < 3; n++) {//count += 1;var str3 = str2;var hadCrossed3 = hadCrossed2.concat();var waitingCross3 = waitingCross2.concat();var totalTime3 = totalTime2;var thirdGo1 = waitingCross3[m];var thirdGo2 = waitingCross3[n];totalTime3 = totalTime3 + thirdGo2;str3 += "<p>第三次过桥由" + thirdGo1 + "和" + thirdGo2 + "过,共计<fond style='color:red'>" + thirdGo2 + "</fond>分钟,合计<fond style='color:red'>" + totalTime3 + "</fond>分钟</p>";//移除waitingCross3.remove(thirdGo1);waitingCross3.remove(thirdGo2);waitingCross3.sort(function (a, b) { return a - b });hadCrossed3.push(thirdGo1);hadCrossed3.push(thirdGo2);hadCrossed3.sort(function (a, b) { return a - b });str3 += "<p>第三次过桥后 hadCrossed=" + hadCrossed3.join() + " waitingCross=" + waitingCross3.join() + "</p>";//第四次返回(过去2人,剩余2人)for (var l = 0; l < 2; l++) {count += 1;var hadCrossed4 = hadCrossed3.concat();var waitingCross4 = waitingCross3.concat();var str4 = str3;var totalTime4 = totalTime3;var fouthBack = hadCrossed4[l];totalTime4 = totalTime4 + fouthBack;str4 += "<p>第四次返回由" + fouthBack + "过,共计<fond style='color:red'>" + fouthBack + "</fond>分钟,合计<fond style='color:red'>" + totalTime4 + "</fond>分钟</p>";//添加waitingCross4.push(fouthBack);waitingCross4.sort(function (a, b) { return a - b });//移除hadCrossed4.remove(fouthBack);hadCrossed4.sort(function (a, b) { return a - b });str4 += "<p>第四次返回后 hadCrossed=" + hadCrossed4.join() + " waitingCross=" + waitingCross4.join() + "</p>";//第五次过桥(全部通过)var hadCrossed5 = hadCrossed4.concat();var waitingCross5 = waitingCross4.concat();var totalTime5 = totalTime4;var fifthGo1 = waitingCross5[0];var fifthGo2 = waitingCross5[1];totalTime5 = totalTime5 + fifthGo2;str4 += "<p>第五次过桥由" + fifthGo1 + "和" + fifthGo2 + "过,共计<fond style='color:red'>" + fifthGo2 + "</fond>分钟,合计<fond style='color:red'>" + totalTime5 + "</fond>分钟</p>";//添加waitingCross5.remove(fifthGo1);waitingCross5.remove(fifthGo2);waitingCross5.sort(function (a, b) { return a - b });//移除hadCrossed5.push(fifthGo1);hadCrossed5.push(fifthGo2);hadCrossed5.sort(function (a, b) { return a - b });str4 += "<p>第五次过桥后 hadCrossed=" + hadCrossed5.join() + " waitingCross=" + waitingCross5.join() + "</p>";str4 += "<p><fond style='color:red'>本方案共计" + totalTime5 + "分钟</fond></p>";var str5 = "方案" + count + str4;str5 += "<p>==================================================================</p>";$('#CrossBridge').append(str5);if (minTime > 0) {if (totalTime5 < minTime) {minStr = str5;}}else {minTime = totalTime5;minStr = str5;}}}}}}}//}$('#CrossBridge').append("<p>/********************************************最短时间方案为**************************************************************/</p>");$('#CrossBridge').append(minStr);
}/*
数组中随机取几个元素
var items = ['1','2','4','5','6','7','8','9','10'];
console.log( getRandomArrayElements(items, 4) );
数组中随机获取一个元素
var item = items[Math.floor(Math.random()*items.length)];
*/
function getRandomArrayElements(arr, count) {var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;while (i-- > min) {index = Math.floor((i + 1) * Math.random());temp = shuffled[index];shuffled[index] = shuffled[i];shuffled[i] = temp;}return shuffled.slice(min);
}Array.prototype.indexOf = function (val) {for (var i = 0; i < this.length; i++) {if (this[i] == val)return i;}return -1;
}Array.prototype.remove = function (val) {var index = this.indexOf(val);if (index > -1) {this.splice(index, 1);}
}

  

转载于:https://www.cnblogs.com/allenfly/p/7405764.html

记一次小学四年级数学问题(四个人过桥)的解决相关推荐

  1. 四年级下册计算机课本目录,人教版小学四年级数学教材下册目录;

    <人教版小学四年级数学教材下册目录;>由会员分享,可在线阅读,更多相关<人教版小学四年级数学教材下册目录;(2页珍藏版)>请在人人文库网上搜索. 1.人教版小学四年级数学教材下 ...

  2. 小学四年级计算机上册考试试题,小学四年级数学上册复习试题

    小学四年级数学上册复习试题 生活是个五味瓶,其中酸.甜.苦.辣.咸.既有真善美,也有假恶丑:既有幸福美满,也有不幸遗憾--相信你在生活中也饱尝喜.怒.哀.乐.下面是小学四年级数学上册复习试题,快来看看 ...

  3. java 3_4_5判断三角形_小学四年级数学下册【填空题】易错题专项训练

    原标题:小学四年级数学下册[填空题]易错题专项训练 易错题训练(填空题)1 1.把1米平均分成10分,每份是,用分数表示是,用小数表示是 2.50个0.1和4个0.01组成的数是. 3.10.496精 ...

  4. 小学四年级计算机教学工作总结,四年级数学教学工作总结

    四年级数学教学工作总结 提起笔又是一年!感慨于时光的匆匆,有时也愿回首走过的路,因为那里有付出的充实,也有收获的喜悦.是的,做为小学时代最重要的转折时期――四年级,我们克服种种压力,用满腔的真诚和科学 ...

  5. 小学四年级数学上册计算机算题,小学四年级数学上册计算练习题

    一.竖式:三位数乘两位数 (延伸阅读:小学四年级数学上册典型应用题练习) 135×45 108×25 54×312 47×210 138×54 126×89 203×32 312×25 437×28 ...

  6. 小学四年级数学上册计算机算题,小学四年级数学上册训练题

    小学四年级数学上册训练题 一.算一算 1.直接写得数(12分) 25×3=(),17×4=(),10×600=(),26×30=(), 100×70=(),48×2=(),20×900=(),16×5 ...

  7. 化简比过程计算机,小学四年级数学总复习

    动动手关注班主任于老师,每天帮家长们解决孩子教育上的问题 小学六年级数学内容多,是小学阶段所学数学知识的综合.为了让孩子在期末考试取得好成绩,家长们给孩子报周末复习班.让孩子反复做题,这样不分主次.没 ...

  8. 小学计算机画线反思,小学四年级数学上册《画平行线》教学反思

    小学四年级数学上册<画平行线>教学反思 过去,对于平行线的画法,我也感到很不理解,特别是用尺子移来移去,实在太麻烦,对于平行线的理解,学生只知道"在同一平面内不相交的两条直线是平 ...

  9. 四年级上册数学计算机的教学视频,人教版小学四年级数学上册教学视频

    教程介绍: 人教版小学四年级数学(上学期)同步课堂教学视频[全33讲].超清视频同步辅导,由数学网课教师小丽老师主讲,和课本完全同步. 1.1亿以内数的认识 1.2亿以内数的读法 1.3亿以内数的写法 ...

最新文章

  1. 乌鲁木齐市计算机职业高中,乌鲁木齐职高有哪些专业
  2. 资源征集 | 2021年全国知识图谱与语义计算大会开放资源征集(Resource Track)通知...
  3. 监听器入门看这篇就够了
  4. 第5章 广义与一般线性模型
  5. Spring动态的切换数据源
  6. spark入门(1)
  7. Linux之mmap
  8. 有关并联机器人动力学的学习
  9. 产品经理项目从0-1工作简要流程
  10. EditText属性整理
  11. Ubuntu+OpenCV学习汉字点阵,图片打印汉字
  12. 课程设计题四:LED彩灯控制器设计
  13. 2021年中国企业风险投资发展现状及未来发展趋势分析[图]
  14. 禁止移动端微信内置浏览器调节字体大小
  15. 基于html+JS实现canvas简易画图工具
  16. scratch下实现子弹追踪特效
  17. SSD1963+STM32F4+RGB565 TFT调试
  18. Neutron DHCP-Agent问题分析定位(2)
  19. 百度谷歌等各大搜索引擎网站收录提交入口
  20. spring IOC(转)

热门文章

  1. 这是蒟蒻,勾搭神犇.
  2. 关于《流浪地球》炸裂的口碑,机器学习竟然是这样评价的————Python文本情感极性分析详解(下)
  3. 深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~
  4. 蒜香法棍--疑难杂症
  5. 卷毛机器人抢大龙_之前职业赛场上哪个选手的机器人让你印象最深刻?卷毛、Madlife还是ignar...
  6. 消费市场复苏 循环时尚生活方式平台红布林618再创佳绩
  7. Android 约束布局 ConstrainLayout min max width
  8. 【NOI模拟赛】摆(线性代数,杜教筛)
  9. 简单讲解memcpy函数并且实现memcpy函数
  10. react17+jest27+enzyme+typescript单元测试教程(含enzyme适配器最新进度跟进)