导航:首页 > 源码编译 > 24点问题算法

24点问题算法

发布时间:2022-08-08 15:49:06

‘壹’ 24点计算方法与技巧

24点的窍门如下:

一、乘法解决(4×6=24、3×8=24、2*12=24)

把牌面上的四个数想办法凑成3和8、4和6、2和12,再相乘求解。

如3、3、6、10可组成(10—6÷3)×3=24等。

又如2、3、3、7可组成(7+3—2)×3=24等。

实践证明,这种方法是利用率最大、命中率最高的一种方法。

二、加减法:(25-1=24、27-3=24、28-4=24、30-6=24)

把牌面上的四个数想办法凑成上述几个减法的减数和被减数。

三、利用0、11的运算特性求解。

如3、4、4、8可组成3×8+4—4=24等。又如4、5、J、K可组成11×(5—4)+13=24等。

计算24点是一种智力游戏,窍门也是因人而异。在计算24点时,应从最简便的运算开始考虑,逐步利用加减乘除等运算方法,把它们巧妙结合,换算出利于算出24的相关数字组合,这样的思路就是所谓的窍门。

‘贰’ 24点的算法技巧

1、利用3×8=24、4×6=24求解。

把牌面上的四个数想办法凑成3和8、4和6,再相乘求解。如3、3、6、10可组成(10—6÷3)×3=24等。又如2、3、3、7可组成(7+3—2)×3=24等。实践证明,这种方法是利用率最大、命中率最高的一种方法。

2、利用0、11的运算特性求解。

如3、4、4、8可组成3×8+4—4=24等。又如4、5、J、K可组成11×(5—4)+13=24等。

3、在有解的牌组中,用得最为广泛的是以下六种解法:(我们用a、b、c、d表示牌面上的四个数)

①(a—b)×(c+d)

如(10—4)×(2+2)=24等。

②(a+b)÷c×d

如(10+2)÷2×4=24等。

③(a-b÷c)×d

如(3—2÷2)×12=24等。

④(a+b-c)×d

如(9+5—2)×2=24等。

⑤a×b+c—d

如11×3+l—10=24等。

⑥(a-b)×c+d

如(4—1)×6+6=24等。

(2)24点问题算法扩展阅读

乘法是加法的简便运算,除法是减法的简便运算。

减法与加法互为逆运算,除法与乘法互为逆运算。

整数的加减法运算法则:

1、相同数位对齐;

2、从个位算起;

3、加法中满几十就向高一位进几;减法中不够减时,就从高一位退1当10和本数位相加后再减。

加法运算性质

从加法交换律和结合律可以得到:几个加数相加,可以任意交换加数的位置;或者先把几个加数相加再和其他的加数相加,它们的和不变。例如:34+72+66+28=(34+66)+(72+28)=200。

‘叁’ 24点游戏算法

看了N个24点的源码了,虽然都能正确的得到结果,不过从效率和智能上来说都很垃圾。(国内的程序员,大多也就是在源码基础上改改而已,这也是企业追逐经济利益的趋势。真正写底层算法的高手就没多少了。。。如果A*,8皇后和跳马的算法对你来说没什么难度,可以尝试写下。很多人应该可以略过看下面的内容了,或者只看不思考,免得伤脑筋)。 这些算法的通病,也正是我目前想解决的问题是:1 效率性把24点扩展一下,就是要写一个函数。function fun(arr:Array,num):Array{ //arr参数为[a,b,c,d,e....] //N个数字,在24点游戏里,为[a,b,c,d] 4个数 //num //要匹配的结果 24点游戏里,num=24 return Array //输出结果存在数组里,如["(3+3)*(2+2)","(3*2+2)*3".........]}如果是N个数字的计算,用N来计算程序的复杂度。那么24点的很多算法是属于穷举排列,无法扩展,并且重复计算量很多。没效率可言2 结果的正确性这个也能说明为什么连把公式穷举出来,作为类似索引表的这样典型空间换时间的方法,效率还是很低。这里还涉及到一点智能问题。
AI很难识别相同的运算。
如 a+b+c+d 和 a+c+b+d 按游戏规则来说属于同种方法 但是在很多方法里,会得出重复的,如同时会输出 ((a+b)+c)*d 和 ((a+c)+b)*d这样同样的公式。在我们玩24点扑克游戏时,这点明显是不允许的。虽然24点这游戏并不是那么严谨,但是有这样的潜规则 在别人讲他的算法时,如果你马上能想出同样能算出24的不同类的方法,可以视为平手 如 2*4*(4-1) 和 (4+4)*(2+1) 可以视为不同的算法。 特殊情况,当牌有点数相同的,花色不同时, 相同点数的位置替代,也应属于同类运算,但是没有一个代码能够识别这些的。 另外(8-(1+3))*6 和 (8-1-3)*6 理应属于同种算法。在程序中理应执行一遍,并且也只属于(8-1-3)*6这种括号数较少的公式才合理。 程序一次是只能计算两个数的运算的。用递归回溯的思路,可以方便的遍历所有的执行顺序和符号组合。但是实际写起来,在程序中,用条件判断,剔除种种不必要的运算和生成简捷正确的公式,难度非常大。另外就是递归的层级相当多,代码设计难度也很大。 这个程序执行所费的时间,花在公式上的存储读取时间和条件判断所花费的时间也是相当可观的。3 智能性 还是回到24点来说了。拟人的思路。 当我们玩24点的游戏,很多时候,大家都不愿意多看,马上要求换牌。比如说A,A,2,2。在程序里可以这样解释,if(a*b*c*d<24){return} 牌太小了不可能有计算结果。 这时我们换了一张牌,结果大家都抢着报自己的答案了。为什么能这么快呢?这和人工智能里的学习记忆机制挂点钩。人算时,并不会像通常的程序那样去排列组合,直到得到满意的结果为止。而是有很多优先的成分。比如说4张牌里面,有一张牌是3,那么,我们马上会想到的是把其它3张牌组合成8。而如果里面有张牌是4,我们会想到把其它3张牌组合成6。而且24点这游戏一般两人玩,手动出牌也很难保证4张牌同时出。不同人的注意力也集中在不同地方。就生成了一个优先度的问题。 如上所诉,那么在计算24点的程序里,如果a,b,c,d里面,有数字=2,3,4,6,8,12这样的12的因数在里面,我们一般应该将这样的数字放在最后去计算,优先组合其它的3个数字。如果数字在数组的位置和优先计算有关系的话,即是 for(var i in arr){ if(arr[i]==24的因数){ arr.push(arr.splice(i,1)) } } 如果要换其中某一张牌时,这时我们其实已经将其他3张牌的种种排列组合已经计算好了。只能与换的那种牌组合了。如果其他3张牌组合好了与第4张牌在一起并不能得到结果,那么也并不代表无解。只是这种方法行不通。那么应该抛弃这样的组合方式,并重新计算(从效率上来说,等同于这样的算法不需要再计算,程序的表达上,这点也较有难度)。 人脑计算时,如果4张牌里面有相同的牌的话, 如果相同的牌不是24的因数,通常是优先把这样的牌给计算掉,假设4张牌为[a1,b1,c,d](后接数字,数字相同的代表数值相等),那么一般会先这样拆 (a1?c)?(b1?d) ,把相同的牌尽量和其他的牌组合,生成24的因数。如 5,5,3,2 这样的牌,我们会马上反映出 5+3=8 5-2=3 3*8=24,那么换成程序来说,4张牌的优先顺序可能为[a1,c,b1,d],当a1,c经过计算得到新值e时,排列为[b1,d,e] 如果相同的牌是24的因数。那么我们可能会保留一个,并计算其他3张能否凑成另一个需要的因数。如牌8,8,2,3 我们会优先计算 8*(8-2-2)。而程序上来说,4个数的优先程度是[a1,c,d,b1]上面只分析了部分常见情况,细分下来非常多,并且在程序里实现起来有点难度。不过如果分得很细了。条件判断所用的时间视为0。而每次拟人的计算过程用setInterval(时间周期模拟人脑的一个计算周期),而不是简单的for来算的话。可能那个24点的程序就很完善了。输入一些参数,设置能模拟出不同的人在牌放置的位置时,计算所用的时间。如果下一次的4张牌刚好和上盘的4张牌一样或重复了3张优先计算的牌,就会像人一样马上靠回忆而不是计算得出结果。 24点的扑克游戏,一个很简单的游戏,如果想复杂了,也是个不得了的东西。
这样可以么?

‘肆’ 二十四点算法是什么

先取三个数,使它的结果为24,容易想到2×7+10=24,这样一来,由此构造一个带分数,使它含有2、7、10这个分数,2或这个带分数乘以7其结果为24,列式为(2+10÷7)×7=24

‘伍’ 24点计算方法与技巧

随便四个数字,计算24点技巧如下:
1、利用3×8=24、4×6=24、12×2=24求解. 把牌面上的四个数想办法凑成3和8、4和6,再相乘求解.如3、3、6、10可组成(10-6÷3)×3=24等.又如2、3、3、7可组成(7+3-2)×3=24等.实践证明,这种方法是利用率最大、命中率最高的一种方法.。
2、利用0、11的运算特性求解. 如3、4、4、8可组成3×8+4-4=24等.又如4、5、J、K可组成11×(5-4)+13=24等。
3、在有解的牌组中,用得最为广泛的是以下六种解法:(我们用a、b、c、d表示牌面上的四个数)
3.1、(a-b)×(c+d) 如(10-4)×(2+2)=24等;
3.2、(a+b)÷c×d 如(10+2)÷2×4=24等;
3.3、(a-b÷c)×d 如(3-2÷2)×12=24等;
3.4、(a+b-c)×d 如(9+5—2)×2=24等;
3.5、a×b+c—d 如11×3+l—10=24等;
3.6、(a-b)×c+d 如(4-l)×6+6=24等。
游戏时,不妨按照上述方法试一试。

‘陆’ 24点算法是什么,用到什么算法

24点是把4个整数(一般是正整数)通过加减乘除运算,使最后的计算结果是24的一个数学游戏 可以考验人的智力和数学敏感性。 通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须且只能用一次,如抽出的牌是3、8、8、9,那么算式为(9—8)×8×3或3×8÷(9—8)或(9—8÷8)×3等。

‘柒’ 小学生24点算法技巧是什么

24点算法技巧就是要掌握两个数怎样加减乘除得24。

加法就是1+23,2+22……

减法就是25-1,28-4……

乘法就是3x8,4x6,12x2,1x24,

除法就是48÷2,72÷3……

快速地将两个数两两结合,得出一个数字,再判定用什么方法。

(7)24点问题算法扩展阅读:

在有解的牌组中,用得最为广泛的是解法:(我们用a、b、c、d表示牌面上的四个数)

①(a-b)×(c+d) 如(10-4)×(2+2)=24等

②(a+b)÷c×d 如(10+2)÷2×4=24等

③(a-b÷c)×d 如(3-2÷2)×12=24等

④(a+b-c)×d 如(9+5-2)×2=24等

⑤a×b+c-d 如11×3+1-10=24等

‘捌’ 24点有多少算法!

24点的巧算方法

“巧算24点”是一种数学游戏,正如象棋、围棋一样是一种人们喜闻乐见的娱乐活动。

它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。这种游戏方式简单易学,能健脑益智,是一项极为有益的活动。

“巧算24点”的游戏内容如下:一副牌中抽去大小王剩下52张,(如果初练也可只用1~10这40张牌)任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式为(9—8)×8×3或3×8+(9—8)或(9—8÷8)×3等。

“算24点”作为一种扑克牌智力游戏,还应注意计算中的技巧问题。计算时,我们不可能把牌面上的4个数的不同组合形式——去试,更不能瞎碰乱凑。这里向大家介绍几种常用的、便于学习掌握的方法:

1.利用3×8=24、4×6=24求解。

把牌面上的四个数想办法凑成3和8、4和6,再相乘求解。如3、3、6、10可组成(10—6÷3)×3=24等。又如2、3、3、7可组成(7+3—2)×3=24等。实践证明,这种方法是利用率最大、命中率最高的一种方法。

2.利用0、11的运算特性求解。

如3、4、4、8可组成3×8+4—4=24等。又如4、5、J、K可组成11×(5—4)+13=24等。

3.在有解的牌组中,用得最为广泛的是以下六种解法:(我们用a、b、c、d表示牌面上的四个数)

①(a—b)×(c+d)

如(10—4)×(2+2)=24等。

②(a+b)÷c×d

如(10+2)÷2×4=24等。

③(a-b÷c)×d

如(3—2÷2)×12=24等。

④(a+b-c)×d

如(9+5—2)×2=24等。

⑤a×b+c—d

如11×3+l—10=24等。

⑥(a-b)×c+d

如(4—l)×6+6=24等。

游戏时,同学们不妨按照上述方法试一试。

需要说明的是:经计算机准确计算,一副牌(52张)中,任意抽取4张可有1820种不同组合,其中有458个牌组算不出24点,如A、A、A、5。

不难看出,“巧算24点”能极大限度地调动眼、脑、手、口、耳多种感官的协调活动,对于培养我们快捷的心算能力和反应能力很有帮助。

‘玖’ 24点的算法

利用计算程序来完成这个计算二十四点的程序
方法如下:
首先穷举的可行性问题。把表达式如下分成三类——
1、 无括号的简单表达式。
2、 有一个括号的简单表达式。
3、 有两个括号的较复杂表达式。
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
那么作为栈的着名应用,表达式的计算可以有两种方法。
第一种方法:
首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
1、 若W为操作数
2、 则将W压入操作数栈OVS
3、 且继续扫描下一个字符
4、 若W为运算符
5、 则根据运算符的性质做相应的处理:
6、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
7、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
8、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
9、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
第二种方法:
首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
表达式波兰表达式
A-B AB-
OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
下面给出转换和计算的具体实现程序——
这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。很快就算出来了,原来如此简单——(6-3)*10-6=24。

‘拾’ 算24点的数字游戏规则

拿一副牌,抽去大小王后(也可以把J/Q/K/大小王也拿去),剩下1~10这40张牌(以下用1代替A)。任意抽取4张牌(称为牌组),用加、减、乘、除把牌面上的数算成24。每张牌必须用且只能用一次。

24点要求四个数字运算结果等于二十四,每张牌必须用且只能用一次。如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3=24。

24点以独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。这种游戏方式简单易学,能健脑益智,是一项有益的活动。

(10)24点问题算法扩展阅读:

24点游戏解锁技巧

24点有一定的解题技巧 ,由于计算最终结果是24,初始数字都是整数,有一些固定的思路。

常规的比如:

3*8=24,4*6=24,2*12=24,24*1=24。

频率略低一些的:

25-1=24,23+1=24,22+2=24,15+9=24,28-4=24,36-12=24。

阅读全文

与24点问题算法相关的资料

热点内容
android聊天控件 浏览:128
导致压缩机坏的原因 浏览:295
如何多次选取文件夹 浏览:280
android编译生成odex 浏览:233
我的世界联机侠服务器如何用指令 浏览:94
地铁逃生战斗服务器为什么进不了 浏览:572
加密门卡怎么模拟小米9 浏览:744
核算法 浏览:631
炸弹命令 浏览:550
连通路径算法 浏览:349
phpemptynull 浏览:366
安卓手机服务器地址在哪里 浏览:428
基于单片机的多路控制器课程设计 浏览:65
pythonimportsys作用 浏览:276
腾讯云拼团云服务器 浏览:364
海南离岛将加贴溯源码销售吗 浏览:244
linux分区读取 浏览:794
单片机液晶显示屏出现雪花 浏览:890
解压器用哪个好一点 浏览:771
什么app看小说全免费 浏览:503