编程求计算24点的方法是什么?

编程求计算24点的方法是什么?,第1张

解法用到的基本思想就是回溯,树的深度为最深为4,树的判断分支为 加减乘除,对不满足条件的解进行剪枝(即当前结果>=24),当到达递归边界(即树的深度为四时)时,即判断当前的结果是否符合条件(=24),符合即找到解,否则继续进行。

参考代码如下:

#include<敏谨iostream>

#include<math.h>

using namespace std

const double MIN=1E-6

void Print(int *Rank,double *FourNum)

{

for(int i=0i<笑拿前4i++)

cout<<FourNum[Rank[i]]<<" "

cout<<endl

}

void Calculate_24(int *Rank,int *FourNum,char *Oper,int i,int j,int k,bool &def)

{

double res=0

switch(i)

{

case 0:

res=FourNum[Rank[0]]+FourNum[Rank[1]]

break

case 1:

res=FourNum[Rank[0]]-FourNum[Rank[1]]

break

case 2:

res=FourNum[Rank[0]]*FourNum[Rank[1]]

break

case 3:

res=FourNum[Rank[0]]/FourNum[Rank[1]]

break

}

switch(j)

{

case 0:

res=res+FourNum[Rank[2]]

break

case 1:

res=res-FourNum[Rank[2]]

break

case 2:

res=res*FourNum[Rank[2]]

break

case 3:

res=res/FourNum[Rank[2]]

break

}

switch(k)

{

case 0:

res=res+FourNum[Rank[3]]

break

case 1:

res=res-FourNum[Rank[3]]

break

case 2:

res=res*FourNum[Rank[3]]

break

case 3:

res=res/FourNum[Rank[3]]

break

}

if(fabs(res-24)>MIN)

return

else

{

def=true

for(int num=1num<=7num++)

{

switch(num)

{

case 1:

cout<<FourNum[Rank[0]]

break

case 3:

cout<<FourNum[Rank[1]]

break

case 5:

cout<<FourNum[Rank[2]]

break

case 7:

cout<<FourNum[Rank[3]]

break

case 2:

cout<<Oper[i]

break

case 4:

cout<<Oper[j]

break

case 6:

cout<<Oper[k]

break

}

}

cout<<endl

}

}

void SearchTree(int Depth,int *Rank,int *FourNum,char *Oper,bool &def)

{

int i,j,k

if(Depth==4)

{

for(i=0i<4i++)

for(j=0j<4j++)

for(k=0k<4k++)

Calculate_24(Rank,FourNum,Oper,i,j,k,def)

}

else

{

for(i=0i<4i++)

{

int Remember=0

for(j=0j<Depthj++)

{

if(Rank[j]==i)

Remember=1

}

if(Remember)

continue

Rank[Depth]=i

SearchTree(Depth+1,Rank,FourNum,Oper,def)

}

}

}

int main()

{

int a[4],b[4],time

char c[4]={'+','-','*','/'}

bool def=false

cin>>time

while(time--)

{

for(int i=0i<4i++)//输入碰清测试数据

cin>>a[i]

cout<<"所有可能的结果:"<<endl

SearchTree(0,b,a,c,def)

if(def==false)

cout<<"No"<<endl

}

return 0

}

随便四个数字,计算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等。

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

计算的情况举例如下。

1:四个数是A,B,C,D,然后将A,B,C,D的各种预算结果列举出来。

2:A+B+C+D2、B-C+A*D3、(A+D)*C+B像这样没有规律的列举电脑是无法完成的,只有弊尘宏靠人工来完成,主要是运算的顺序,数字的顺序相对简单些。

3:只需要在改变参数位置就可以了,租册主要是运算要考虑优先级,而数字没有优先级。

4:24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的兄燃计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8241336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存