计算24点
//---------------------------------------------------------------------------
//24点的C++算法
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
//计算24点
void __stdcall Compute24(int len);
//EXP[0]-EXP[1]无用,EXP[2]-EXP[4]记录操作符
int EXP[5];
//OPT[0]-OPT[1]无用,OPT[][0]-EXP[][3]分别对应操作数a,操作数b,结果t
float OPT[5][3];
//四个数字
//float NUM[4]={5,5,5,1};//有解
float NUM[4]={2,3,5,6};//有解
//float NUM[4]={3,4,6,7};//无解
//最终结果
const float result=24.0;
//解的个数
int count=0;
//测试
void test(void)
{ //产生随机数,1-9,不重复
srand(GetTickCount());
for(int i=0;i<4;++i)
{ int j,t;
do
{ t=1+rand()%9;
for(j=0;j<i;++j)
if(t==NUM[j])
break;
}while(j<i);
NUM[i]=(float)t;
}
printf("/t%3.3f,%3.3f,%3.3f,%3.3f/n",NUM[0],NUM[1],NUM[2],NUM[3]);
Compute24(4);
if(count==0)
{ printf("/t对不起,本次无解!/n");
}
// system("pause");
}
//计算24点
void __stdcall Compute24(int len)
{ //终止条件
if(len==1)
{ if(fabs(NUM[0]-result)<0.001)
{ printf("第%d种:/n",++count);
for(int i=4;i>1;--i)
{ printf("/t%3.3f/t%3c/t%3.3f/t=/t%3.3f/n",/
OPT[i][0],EXP[i],OPT[i][1],OPT[i][2]);
}
}
return;
}
//任取两数
for(int i=0;i<len;++i)
{ for(int j=i+1;j<len;++j)
{ float a=NUM[i];
float b=NUM[j];
float t;
NUM[j]=NUM[len-1];//调整数组
//六种可能,分别执行
OPT[len][0]=a,OPT[len][1]=b;
NUM[i]=t=a+b;//加法
EXP[len]='+',OPT[len][2]=t;
Compute24(len-1);
NUM[i]=t=a-b;//减法
EXP[len]='-',OPT[len][2]=t;
Compute24(len-1);
NUM[i]=t=a*b;//乘法
EXP[len]='*',OPT[len][2]=t;
Compute24(len-1);
if(fabs(b)>0.001)
{ NUM[i]=t=a/b;//除法
EXP[len]='/';
OPT[len][2]=t;
Compute24(len-1);
}
OPT[len][0]=b,OPT[len][1]=a;
NUM[i]=t=b-a;//交换减法
EXP[len]='-',OPT[len][2]=t;
Compute24(len-1);
if(fabs(a)>0.001)
{ NUM[i]=t=b/a;//交换除法
EXP[len]='/';
OPT[len][2]=t;
Compute24(len-1);
}
//恢复数组
NUM[i]=a;
NUM[j]=b;
}
}
}
*/
上一篇: 补全题解的数学专题指南
下一篇: 深度探索24点游戏溯源之旅
推荐阅读
-
计算机 毕业设计 Python 深度学习 房价预测 房源可视化 房源爬虫 二手房可视化 二手房爬虫 递归决策树模型 机器学习 深度学习 大数据 毕业设计
-
常见 TCP/IP 协议基础知识 - 计算机网络
-
设计并实施基于 SpringBoot 的 DIY 计算机安装教程网站。
-
SlowFast 网络:计算机视觉视频理解的新范式。
-
LeetCode:计算满足 k 约束 I 的子串数量(滑动窗口 Java)
-
计算机网络:数据链路层--可靠的传输服务
-
[图形] 蒙特卡罗积分法及其方差计算导论-II。
-
计算机和网络
-
FPGA 实现 PCIE 捕捉计算机视频到 SFP 光端口的 UDP 输出,基于 XDMA + GTX 架构,提供 4 套工程源代码和技术支持
-
深入了解计算机系统 - 计算机系统漫游