问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言实训求:编程实现24点游戏算法

发布网友 发布时间:2022-04-23 23:05

我来回答

2个回答

热心网友 时间:2023-07-09 19:08

#include<iostream>
#include<math.h>
using namespace std;
const double MIN=1E-6;
void Print(int *Rank,double *FourNum)
{
for(int i=0;i<4;i++)
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=1;num<=7;num++)
{
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=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
Calculate_24(Rank,FourNum,Oper,i,j,k,def);
}
else
{
for(i=0;i<4;i++)
{
int Remember=0;
for(j=0;j<Depth;j++)
{
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=0;i<4;i++)//输入测试数据
cin>>a[i];
cout<<"所有可能的结果:"<<endl;
SearchTree(0,b,a,c,def);
if(def==false)
cout<<"No"<<endl;
}
return 0;
}

热心网友 时间:2023-07-09 19:09

上面的程序是正确的,这题的解法用到的基本思想就是回溯,树的深度为最深为4,树的判断分支为 加减乘除,对不满足条件的解进行剪枝(即当前结果>=24),当到达递归边界(即树的深度为四时)时,即判断当前的结果是否符合条件(=24),符合即找到解,否则继续进行。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 网贷多了,快还不上了。大概还有3万左右,怎么办?都想死了算了,有什么办法可以尽快挣到钱吗? 以前退出的QQ群又回来了,之前的聊天记录没有了怎么找回? c语言编程题,计算二十四点 随机生成四个1~10的数字,使用加减乘除运算,计算24.输出这四个数字是否能计算 减肥怎样有效 用C语言程序编写“抢24”游戏,规则就是两个人,第一个人从数字1开始,可以说1或者1和2,第二个人_百度问一问 减肥怎么减? 算24点编程题,请用pascal qq恢复聊天记录一年前? 减肥怎么样 24点游戏程序编程 减肥怎样才有效果? 删除数据重上qq后,为什么还有QQ群聊天记录,却没有私人的 怎样编程计算24的游戏 怎样才能减肥怎样才能减肥 编程求计算24点的方法是什么? 减肥怎样最快? 编程求计算24点的方法 24学编程晚不晚 手机退出QQ群,然后重新进入之前QQ群,电脑有聊天记录,能不能恢复到手机上去? 减肥怎样减更快 减肥怎样科学? 求助~~24速算的C语言编程~~ C++ 编程,24点游戏 PIC24编程问题 网贷想上岸,不知道如何开始?非常感谢 单片机课程电子钟软件编程时,如何用汇编语言实现24进制的编程? 编程C语言 24点游戏 玩一个组合24的C语言编程游戏。 c语言编程24点游戏,由电脑给四个随机数,用户输入含这四个随机数的算法,有没有大神会啊,帮帮忙啊。 蚕丝被好不好 缺点有哪些 我欠了20万网贷如何强制上岸 求一个简单的C语言游戏24点的编程代码。可以在WIN-TC上面运行的 如何脱离网贷生涯,成功上岸 蚕丝被好吗,什么季节用最好? java程序设计:算24点 c语言程序设计中如何写24变成42的代码? 用蚕丝被好吗? 蚕丝被好不好 蚕丝被好吗 蚕丝被干洗可以吗?