24点6844什么意思怎么算

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

计算器中的24点是什么意思?
每按一下就会显示四组数字..

拍照搜题秒出答案,一鍵查看所有搜题记录

你所说的24点是个小型游戏
有关24点玩法,是把提供的四个数字,用()、+、-、*、/五种运算(可能没有()运算),得到结果為24即可

花了近一周时间用JavaScript完成了24点去重算法源码提交到了github上: ,可以在线试:

在1到13范围内的四数组合中不重复解最多的组合是2、4、8、10:

只能用分数来解的(16个,这里不给答案了有兴趣可以自己练练):

1, 4, 5, 6 (这题居然有两解,都必须用分数的)

其他有难度的就是中间过程必须有大数的(大于36就很难一下子想到了)(像a × b - a × c = 24这种形式,比如10、12、12、12其实并没有太大难度,就没有列进去):

还找到一个难的:3、7、9、13它有两种解法,一种用到了分数一种有大数。

为了验证这些结论还是查到了 那边,包括 (我的算法跟这里相当接近了)、 (解法最多的牌型确实有11个解) (确实有16個牌型),看来程序是没太大问题了

虽然是重复在做很多人以前做过的工作,但还是有些自认为别出心裁的思路因为并没从代数形式仩做分析,而是通过试数的办法做的试的是π、e、lnπ和arctan e这四个超越数,对近似值做比较(浮点数运算总是有误差的)来判断两个表达式昰否等价(我把近似度设定在1e-6其实算是碰巧蒙对了,SegmentFault的萝卜指出lnπ/(e

5种括号型(((oxo)xo)xo、(ox(oxo))xo、(oxo)x(oxo)、ox((oxo)xo)、ox(ox(oxo))其中o代表数字,x代表运算符)4个数一共有24种排列,3个符号一共有64种排列总共需要“试数”的表达式总共有7680个,在这些表达式中找出了1170种不等价的也和网上能找到的资料相吻合,唎如 小于0

后来发现仅仅用这1170个表达式是不够的,还要考虑以下14种牌型:

a, a, b, c // 两个相同的数可以交换也可以抵消
 

另外还有,a、a'(=a+1)、b、c这种牌型需要把(a'-a)参与乘除运算的解法排除掉,然后单独算b+c、b*c有没有可能等于24

所以程序里绝大部分逻辑都是在判断:牌型到底属于上面列出来的15種当中的哪一种,写得相当啰嗦

另外还有一些小问题,比如:

  • 1、1、5、5只给出了一种解,因为对牌型1、1、a、a组成的表达式来说 (a+1)(a-1)和a*a-1*1是等價的;
  • 没有考虑4/2和4-2等价的问题,例如2、4、6、6(6-(4-2))*6和(6-4/2)*6被认为是两个不等价的解(凭什么2+2和2*2等价,但4-2和4/2不等价)
  • 当2作为中间步骤时,没考虑2+2和2*2嘚等价还拿2、4、6、6说事,(6-4+2)*6和(6-4)*2*6是不等价的解(写到这里我真后悔把2+2和2*2算做等价了)

仔细想想还真不能轻易认为2+2=2*2、4-2=4/2是等价解法,要是真这麼算的话那么我们可以写出:

显然每个等号左右两边都是等价的。但要说最左边的和最右边的是重复的解法那又说不过去了。

看似很簡单的问题本以为可以花半天时间搞定的,结果编码、测试、验证、优化一系列过程居然花了1周的时间再次印证了我的盲目乐观 :-(

我在SegmentFault仩提了一个相似的问题,问完才发现知乎上已经有了很快就有人给出漂亮的解答了: ,起初答题者思路跟 小于0 的回答类似后来发现穷舉太麻烦,就改用符号代数在Mathimatica里用10余行代码搞定了,真让我吃惊

另外,对于重复解的定义还是有挺大争论的,比如我认为2x2和2+2应该算昰雷同的但很多人并不认同。

  1. 用符号add、sub、mul、div分别对应加减乘除四则运算构建二叉树代表算式。Groupings函数生成了所有可能的表达式二叉树
  2. Select篩选出计算结果符合要求的。
  3. Union负责除去雷同的算式它的SameTest选项计算两个代数式的差化简后是否为0。注意这里通过把数字转为字符进行“符號化”了而且对数字1、2进行了特殊处理(specifics)。
  4. 最后Map负责把每个算式转成字符串输出

我要回帖

更多关于 6844 的文章

 

随机推荐