js实现杯子倒水问题自动求解程序

智力测试题经常遇到类似的逻辑题,给几个容量不等的杯子,让你倒出多少的水。

安卓上有一款专门玩这个题的游戏叫做Water Logic.

我安装这个游戏把几十个关卡通了一遍,感觉这个游戏的关卡设计很不好,关卡的难度并不是递增的,有很多后面的关卡相当的弱智,并且缺乏高难度的关卡。

做为程序员的我们,玩这类题目应该都没问题,10步以内的都可以轻松搞定,10步以上的也可以搞定但未必能够轻松达到最少步数。

有3颗星强迫症的玩家兼程序员,写出这么个自动求解的小程序,以后这个问题再也不是问题了。

点击这里试试杯子倒水问题自动求解吧

算法基本逻辑

每个杯子有倒满、倒空、倒入其它杯子的操作,所以总共是: 杯子数*(杯子数-1+2)

对于3只杯子的情况,每一步可选的操作有12种.  如果2个杯子则每步可选操作有6种。

遍历每一种操作,记录操作完成后各个杯子内的水量,以水量计算出一个key来建立map.

遍历各种倒水操作的过程中,如果key已经存在且当前步数大于先前记录的步数则舍弃该操作。

这个小程序只能解决2个杯子或3个杯子的倒水问题,并没有写成N个杯子通用的,代码有很多hard code。

(0)

相关推荐

  • JS求平均值的小例子

    效果: 事件:当输入完三个文本框后触发blur事件.计算出平均值 说明:调用方法计算出平均值, 代码: 文本框中: 复制代码 代码如下: <asp:TextBox ID="tblmyd11" Field="lmyd11" TableName="gqls_sy" EnabledAction="(12.*)"  CssClass="erp_textbox_short" runat="server

  • javascript中数组中求最大值示例代码

    复制代码 代码如下: <html> <head> <title>数组的最大值的获取</title> <script> //定义数组 var arr = [1,4,3,9,5,0,-1,7,22]; //最大值的下标,先假定为第一个元素的下标 var index = 0; for(var x = 0; x < arr.length; x++){ if(arr[index] < arr[x]){ index = x; } } docume

  • JS求解三元一次方程组值的方法

    本文实例讲述了JS求解三元一次方程组值的方法.分享给大家供大家参考,具体如下: // 求用js 码一段代码求 三元一次方程组的值! // a1 = y * b1 + z * c1 - d1 * x; (1) // a2 = y * b2 + z * c2 - d2 * x; (2) // a3 = y * b3 + z * c3 - d3 * x; (3) // (1) - (2) // a1 - a2 = y * (c1 - c2) + z * (d1 - d2) (4) // (1) - (

  • JSONP跨域GET请求解决Ajax跨域访问问题

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址.难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaScript或jQuery是在Web前端开发中经常使用的动态脚本技术.在JavaScript中,有一个很重要

  • javascript 运算数的求值顺序

    比如 复制代码 代码如下: a * b + c; ,先算乘方,再算乘除,最后算加减 ,有括号,先算括号里面的,同一级运算按照从左到右的顺序依次进行 这一点所有的程序设计语言都采取数学中数字的计算顺序.当然程序设计语言中还有一些不同于数学中的运算符.那运算数的求值顺序是如何的呢? 如下 复制代码 代码如下: // 求 a 和 b的和 sum = a + b; ,从内存中取a的值 ,从内存中取b的值 ,进行相加运算 貌似描述的很弱智,理所当然就是这样的.有人可能觉得先取b的值,再取a,然后相加.这样

  • 深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解

    介绍 本章,我们将讲解在ECMAScript向函数function传递参数的策略. 计算机科学里对这种策略一般称为"evaluation strategy"(大叔注:有的人说翻译成求值策略,有的人翻译成赋值策略,通看下面的内容,我觉得称为赋值策略更为恰当,anyway,标题还是写成大家容易理解的求值策略吧),例如在编程语言为求值或者计算表达式设置规则.向函数传递参数的策略是一个特殊的case. http://dmitrysoshnikov.com/ecmascript/chapter-

  • JavaScript代码简单实现求杨辉三角给定行的最大值

    复制代码 代码如下: function cal(row) { var result = 1; for(var i = 0; i < row / 2; i++) { return result * = (row - i) / i; } return result; };

  • JavaScript遍历求解数独问题的主要思路小结

    数独规则 数独游戏,经典的为9×9=81个单元格组成的九宫格,同时也形成了3×3=9个小九宫格,要求在81个小单元格中填入数字1~9,并且数字在每行每列及每个小九宫格中都不能重复. 数独技巧 直观法 候选数法 相关二十格:一个数字只与其所在行列及小九宫格的二十格相关 我的思路 精心设计了有效性判定函数,最多一次遍历81个小单元格就能做出方案的有效性判定. 同理设计了相关20格判定,一次0~9的循环就完成有效性判定. 用数组模拟堆栈,为搜索提供回溯信息. 利用对象具有map性质,来辅助判断方案的有

  • javascript字符串拆分成单个字符相加和不超过10,求最终值第1/2页

    首先把你的生日列出来 比如 1987 12 25 然后一位位的相加 1+9+8+7+1+2+2+5=35 把得出的数字再拆分 再加 3+5=8 得出的数字8 就是最后的结果,如果超过10的话就在拆分再加 1 肾脏 2 眼睛 3 才华天赋 4 良性基因 5 友情 6 慈善之心 7 亲情 8 健康和寿命 9 爱情 10 恭喜你 你拥有纯净的灵魂 最适合典当cloeft的示例 var str = "19871229"; var count = 0; for(var i = 0 ; i 10)

  • 分享JS数组求和与求最大值的方法

    前言 面试遇到一个问题:JS数组求和函数.我第一想到的就是数组循环.然而我觉得面试官问这个问题一定不是想考这个人人皆知的方法.当时机智的我竟然想到了递归函数不断加和数组的项,然而折腾了好久都没调好方法,事实证明这并不是最优解.最后面试官问我有没有见过reduce(),真木有哇.所以回来查资料,Array.reduce()是ES5新增的新属性,相似的还有Array.reduceRight(). 下文来总结一下数组求和的方法. 最粗暴的方法:循环获取 通过for循环一项项地加和.看代码: Array

  • 求解开jscript.encode代码的asp函数

    javascript函数已经有了,有没有Asp的函数???      或者有没有高手可以把下面的写成asp的   ,万分感谢~!! 复制代码 代码如下: <SCRIPT   LANGUAGE="JavaScript">       <!--       function   toEncode(s,l)       {enc=new   ActiveXObject("Scripting.Encoder");       return   enc.En

随机推荐