题目

输入: n1, n2, n3, n4 (1~13)

输出: 若能得到运算结果为 24, 则输出一个对应的运算表达式

如:

输入: 11, 8, 3, 5

输出: (11-8) * (3*5) = 24

思路

1. 假设不考虑括号, 4 个数, 每个数只能使用一次, 那就就对 4 个数全排列, 中间有3 个位置插入符号, 共四种符号, 共有 4!*4^3种表达式. 再加上括号, 一共 7680 种.

2. 遍历所有变量, 包括运算符, 数字, 括号是一种解法. 首先从集合中任意取出两个数, 对他们进行四则运算(A+B, A-B, B-A...) 然后再放回去即的递归解法. 这种解法效率较低, 存在较多的冗余计算.

3. 定义 Fork 函数, Fork(A,B) = {a+b, a-b, b-a...}. 假如 A 中有 m 个元素, B 中有 n 个元素, 那么 Fork(A,B) 将会有 6*m*n 个元素, 然后, 可以对这些元素进行小规模的去重, 使得返回的结果集不含重复

4. 对于单个集合, Fork(A) = Fork(A1, {A-A1}). 对于一个大小为 n 的集合 A, 其所有非空子集的个数为 2n-2(减去空集和全集)(为什么)

5. 上面的解析给出了减少返回集合冗余的方法, 但仍有重复计算. 对于重复计算部分可以设置一张表, 记录已经计算过的组合

编程之美 set 21 24点游戏的更多相关文章

  1. php实现 24点游戏算法

    php实现 24点游戏算法 一.总结 一句话总结:把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算.在求表达式的过程中,最难处理的 ...

  2. 24点游戏(24 game)的C++编程求解实现

    什么是24点游戏 24点游戏,英文叫做24 game,是对给定的4个非负整数进行加减乘除运算,要求每个数都要被用到且仅用到一次,并得到最终的运算结果为24.比如3.8.3.8这四个数,可以找出唯一的一 ...

  3. 用python代替人脑运算24点游戏

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  4. 【Nodejs】“快算24”扑克牌游戏算法

    算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...

  5. bzoj1215 24点游戏

    Description 为了培养小孩的计算能力,大人们经常给小孩玩这样的游戏:从1付扑克牌中任意抽出4张扑克,要小孩用“+”.“-”.“×”.“÷”和括号组成一个合法的表达式,并使表达式的值为24点. ...

  6. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  7. 【编程之美】超时重传,滑动窗口,可靠性传输原理C语言实现

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/128003 ...

  8. 2016年12月29日 星期四 --出埃及记 Exodus 21:24

    2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...

  9. 【编程之美】2.5 寻找最大的k个数

    有若干个互不相等的无序的数,怎么选出其中最大的k个数. 我自己的方案:因为学过找第k大数的O(N)算法,所以第一反应就是找第K大的数.然后把所有大于等于第k大的数取出来. 写这个知道算法的代码都花了2 ...

随机推荐

  1. 【jQuery获取下拉框select、单选框radio、input普通框的值和checkbox选中的个数】

    radio单选框:name属性相同 <input type="radio" id="sp_type" name="p_type" va ...

  2. PHP Token(令牌)设计应用

    转自:http://my.oschina.net/u/912810/blog/358973 <?php class GEncrypt { protected static function ke ...

  3. EF Code First:使用T4模板生成相似代码

    http://developer.51cto.com/art/201309/409948.htm

  4. 解析URL中的携带的参数到Map

    手动解析URL字符串中的参数,写了一个工具类. final ; final ; public Map<String, String> parseRequestParam(String ur ...

  5. CSS3多背景应用

    /*多背景应用*/ .wrapper { width: 640px; height: 1000px; margin: auto; background: url(./images/head.jpg) ...

  6. jq实现千分位的转换

    一.千分位转换位整数 var sum = '2,034,300';var x = sum.split(",");var plan_sum = parseFloat(x.join(& ...

  7. Ubuntu12.04 修复GRUB

    电脑安装了双系统,本来好好的GRUB管理启动,在重装过之后就只能进win7了,所以尝试将GRuB重新安装到mbr,使用GRUB作为启动管理程序. 1.制作U盘系统 使用软碟通,讲Ubuntu12.04 ...

  8. Java Mail(一):telnet实现发送收取邮件

    http://blog.csdn.net/ghsau/article/details/8602076 ******************************* 最近要做一个解析邮件的东东,就顺便 ...

  9. httpclient 4种关闭连接

    因此这样的配置就会导致每个链接至少要过180S才会被释放,这样在大量请求访问时就必然会造成链接被占满,请求等待的情况. 在通过DEBUH后发现HttpClient在method.releaseConn ...

  10. [C++]VAssistX文件头添加注释功能设置

    问题情况:每次手写注释太慢,而且不统一.问题原因:C++可以利用宏写注释,也可以使用VAssistX提供的方法.问题处理:1.安装VAssistX在VS2010上2.VS2010菜单->VAss ...