js实现杯子倒水问题自动求解程序
智力测试题经常遇到类似的逻辑题,给几个容量不等的杯子,让你倒出多少的水。
安卓上有一款专门玩这个题的游戏叫做Water Logic.
我安装这个游戏把几十个关卡通了一遍,感觉这个游戏的关卡设计很不好,关卡的难度并不是递增的,有很多后面的关卡相当的弱智,并且缺乏高难度的关卡。
做为程序员的我们,玩这类题目应该都没问题,10步以内的都可以轻松搞定,10步以上的也可以搞定但未必能够轻松达到最少步数。
有3颗星强迫症的玩家兼程序员,写出这么个自动求解的小程序,以后这个问题再也不是问题了。
算法基本逻辑:
每个杯子有倒满、倒空、倒入其它杯子的操作,所以总共是: 杯子数*(杯子数-1+2)
对于3只杯子的情况,每一步可选的操作有12种. 如果2个杯子则每步可选操作有6种。
遍历每一种操作,记录操作完成后各个杯子内的水量,以水量计算出一个key来建立map.
遍历各种倒水操作的过程中,如果key已经存在且当前步数大于先前记录的步数则舍弃该操作。
这个小程序只能解决2个杯子或3个杯子的倒水问题,并没有写成N个杯子通用的,代码有很多hard code。
相关推荐
-
JavaScript遍历求解数独问题的主要思路小结
数独规则 数独游戏,经典的为9×9=81个单元格组成的九宫格,同时也形成了3×3=9个小九宫格,要求在81个小单元格中填入数字1~9,并且数字在每行每列及每个小九宫格中都不能重复. 数独技巧 直观法 候选数法 相关二十格:一个数字只与其所在行列及小九宫格的二十格相关 我的思路 精心设计了有效性判定函数,最多一次遍历81个小单元格就能做出方案的有效性判定. 同理设计了相关20格判定,一次0~9的循环就完成有效性判定. 用数组模拟堆栈,为搜索提供回溯信息. 利用对象具有map性质,来辅助判断方案的有
-
JavaScript代码简单实现求杨辉三角给定行的最大值
复制代码 代码如下: function cal(row) { var result = 1; for(var i = 0; i < row / 2; i++) { return result * = (row - i) / i; } return result; };
-
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) - (
-
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求平均值的小例子
效果: 事件:当输入完三个文本框后触发blur事件.计算出平均值 说明:调用方法计算出平均值, 代码: 文本框中: 复制代码 代码如下: <asp:TextBox ID="tblmyd11" Field="lmyd11" TableName="gqls_sy" EnabledAction="(12.*)" CssClass="erp_textbox_short" runat="server
-
JSONP跨域GET请求解决Ajax跨域访问问题
前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址.难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaScript或jQuery是在Web前端开发中经常使用的动态脚本技术.在JavaScript中,有一个很重要
-
分享JS数组求和与求最大值的方法
前言 面试遇到一个问题:JS数组求和函数.我第一想到的就是数组循环.然而我觉得面试官问这个问题一定不是想考这个人人皆知的方法.当时机智的我竟然想到了递归函数不断加和数组的项,然而折腾了好久都没调好方法,事实证明这并不是最优解.最后面试官问我有没有见过reduce(),真木有哇.所以回来查资料,Array.reduce()是ES5新增的新属性,相似的还有Array.reduceRight(). 下文来总结一下数组求和的方法. 最粗暴的方法:循环获取 通过for循环一项项地加和.看代码: Array
-
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
介绍 本章,我们将讲解在ECMAScript向函数function传递参数的策略. 计算机科学里对这种策略一般称为"evaluation strategy"(大叔注:有的人说翻译成求值策略,有的人翻译成赋值策略,通看下面的内容,我觉得称为赋值策略更为恰当,anyway,标题还是写成大家容易理解的求值策略吧),例如在编程语言为求值或者计算表达式设置规则.向函数传递参数的策略是一个特殊的case. http://dmitrysoshnikov.com/ecmascript/chapter-
-
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)
-
求解开jscript.encode代码的asp函数
javascript函数已经有了,有没有Asp的函数??? 或者有没有高手可以把下面的写成asp的 ,万分感谢~!! 复制代码 代码如下: <SCRIPT LANGUAGE="JavaScript"> <!-- function toEncode(s,l) {enc=new ActiveXObject("Scripting.Encoder"); return enc.En
-
javascript 运算数的求值顺序
比如 复制代码 代码如下: a * b + c; ,先算乘方,再算乘除,最后算加减 ,有括号,先算括号里面的,同一级运算按照从左到右的顺序依次进行 这一点所有的程序设计语言都采取数学中数字的计算顺序.当然程序设计语言中还有一些不同于数学中的运算符.那运算数的求值顺序是如何的呢? 如下 复制代码 代码如下: // 求 a 和 b的和 sum = a + b; ,从内存中取a的值 ,从内存中取b的值 ,进行相加运算 貌似描述的很弱智,理所当然就是这样的.有人可能觉得先取b的值,再取a,然后相加.这样
随机推荐
- Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
- 如何用DOS命令删除顽固文件夹啊
- 深入解析Java并发程序中线程的同步与线程锁的使用
- java实现屏幕共享功能实例分析
- JS实现点击颜色块切换指定区域背景颜色的方法
- asp.net Repeater取得CheckBox选中的某行某个值的c#写法
- C#实现GZip压缩和解压缩入门实例
- Asp.NET 多层登陆实现代码
- win平台安装配置Nginx+php+mysql 环境
- 详解使用pymysql在python中对mysql的增删改查操作(综合)
- EJB组件与可重用性的矛盾
- Android Camera变焦编程步骤
- 修改MySQL的默认密码的四种小方法
- javascript 一个自定义长度的文本自动换行的函数
- 利用Split函数进行多关键字检索
- 安装SQL2008时提示删除SQL2005Express工具的解决方法
- Js自动截取字符串长度,添加省略号(……)的实现方法
- 用KWF打造与众不同的VPN服务器
- Python数据结构之双向链表的定义与使用方法示例
- python如何派生内置不可变类型并修改实例化行为