二十四点算法 原理(比如:3,7,-5,-13用加减乘除每个数只能用一次=24)
来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/22 05:20:02
二十四点算法 原理(比如:3,7,-5,-13用加减乘除每个数只能用一次=24)
漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来.此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式.但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,
问题既然出现了,我们当然要解决.冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行.想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,因为在这学期我曾经写过一个小程序——计算有括号的简单表达式.只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节.
首先穷举的可行性问题.我把表达式如下分成三类——
1、 无括号的简单表达式.
2、 有一个括号的简单表达式.
3、 有两个括号的较复4、 杂表达式.
穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24.我利用一个嵌套函数实现四个数的排列,算法如下:
/* ans[] 用来存放各种排列组合的数组 */
/* c[] 存放四张牌的数组 */
/* k[] c[]种四张牌的代号,其中k[I]=I+1.
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
/* kans[] 暂存生成的排列组合 */
/* j 嵌套循环的次数 */
int fans(c,k,ans,kans,j)
int j,k[],c[];char ans[],kans[];
{ int i,p,q,r,h,flag,s[4],t[4][4];
for(p=0,q=0;p
问题既然出现了,我们当然要解决.冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行.想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,因为在这学期我曾经写过一个小程序——计算有括号的简单表达式.只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节.
首先穷举的可行性问题.我把表达式如下分成三类——
1、 无括号的简单表达式.
2、 有一个括号的简单表达式.
3、 有两个括号的较复4、 杂表达式.
穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24.我利用一个嵌套函数实现四个数的排列,算法如下:
/* ans[] 用来存放各种排列组合的数组 */
/* c[] 存放四张牌的数组 */
/* k[] c[]种四张牌的代号,其中k[I]=I+1.
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
/* kans[] 暂存生成的排列组合 */
/* j 嵌套循环的次数 */
int fans(c,k,ans,kans,j)
int j,k[],c[];char ans[],kans[];
{ int i,p,q,r,h,flag,s[4],t[4][4];
for(p=0,q=0;p
二十四点算法 原理(比如:3,7,-5,-13用加减乘除每个数只能用一次=24)
"二十四点“游戏:将4个绝对值小于或等于13的整数进行加减乘除运算,每个数只能用一次,使其结果等于24
算二十四点:7 7 3 3每个数只能用一次.
7,7,3,-3 算二十四点.每个数只能用一次.
3 -5 7 -13 用加减乘除算出24 每个数只能用一次
3 3 7 7每个数用一次,只能用加减乘除,怎么得24点.
二十四点算法,现在四个数3、7、-3、7,每个数且只能用一次加、减、乘、除使其结果等于二十四,列式为——
用1 2 3 4 5 6 7 8 9 10 12 13 这十二个数编出加减乘除算法各一个《每个数只能用一次》
四个数 3,-5,7,-13(每个只能用一次)进行加减乘除得数等于24
算二十四点,每个数只能用一次:用5、5、5、1列式计算(),用7、7、3、3、列式计算
3 4 负6 10凑成24点[每个数用一次]只能用加减乘除
根据二十四点算法,现有四个数-2 4 -5 -10,每个数只用一次进行加减乘除,结果等于24