社区
C++ Builder
帖子详情
24点有没有最简单的算法?
yhec
2012-06-26 10:43:04
我在网上找了个24点算法,程序能运行,下面这几个较经典的怪数都能算出
9*10/6+9=24
(5-1/5)*5=24
(4-4/7)*7=24
(3+3/7)*7=24
但下面两组却不能算出,说明我找来的算法肯定有问题,你先试试看:
1,4,5,6
3,8,3,8
希望能找到更好的算法(当然要能解决上面两组24点数)
...全文
354
7
打赏
收藏
24点有没有最简单的算法?
我在网上找了个24点算法,程序能运行,下面这几个较经典的怪数都能算出 9*10/6+9=24 (5-1/5)*5=24 (4-4/7)*7=24 (3+3/7)*7=24 但下面两组却不能算出,说明我找来的算法肯定有问题,你先试试看: 1,4,5,6 3,8,3,8 希望能找到更好的算法(当然要能解决上面两组24点数)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yhec
2012-06-27
打赏
举报
回复
百度看了许多文章,昨天试了一个晚上,这个穷举法简单方法很满意,也没有用什么堆栈,
也没有用高深的东东,可以很快的列出计算24点的各种可能性,简单快速。
四个数排列的穷举次数:4!=24种
三个运算符的穷举次数:4X4X4=64次
用括号决定的运算优先级: 3!-1=5次,
所以。穷举总次数 24*64*5=7680次 不到1秒钟就执行完
yhec
2012-06-27
打赏
举报
回复
先试下,惊喜中。。。。。
BCBPLC
2012-06-27
打赏
举报
回复
用多重循环采用穷举法,这程序绝对简单,没有什么高深的东西。
BCBPLC
2012-06-27
打赏
举报
回复
#include "stdio.h"
bool div0=false; // 是否被0除的标志
double cal(double a,double b,int op)
{
switch (op)
{
case 0: return(a+b);
case 1: return(a-b);
case 2: return(a*b);
}
if (b==0.0)
{
div0=true; // 分母为0
return(0);
}
return(a/b);
}
bool isEqual(double d1,double d2) // 两个浮点数是否近似相等
{
if (div0)
{
div0=false; // 清div0
return(false);
}
double d=d1-d2;
if (d<0)
d=-d; // 求绝对值
return(d<=1e-3);
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
char op[]={'+','-','*','/'}; // +:0 -:1 *:2 /:3
int v[4];
v[0]=Edit1->Text.ToInt(); // 存四个数
v[1]=Edit2->Text.ToInt();
v[2]=Edit3->Text.ToInt();
v[3]=Edit4->Text.ToInt();
int count=0;
for (int i1=0;i1<4;i1++)
for (int i2=0;i2<4;i2++)
for (int i3=0;i3<4;i3++)
for (int i4=0;i4<4;i4++)
if (i1!=i2 && i1!=i3 && i1!=i4 &&
i2!=i3 && i2!=i4 &&
i3!=i4) // 产生数的排列
{
int a,b,c,d; // 存放四张牌的一次排列
a=v[i1];
b=v[i2];
c=v[i3];
d=v[i4]; // 四张牌的值a,b,c,d
for (int f1=0;f1<4;f1++) // 对运算符组合
for (int f2=0;f2<4;f2++)
for (int f3=0;f3<4;f3++) // 运算符 f1,f2,f3
{
double t1,t2,t3; // 存放计算的中间值
// 第1种情况 ((a 。b)。c)。d :
div0=false;
t1=cal(a,b,f1);
t2=cal(t1,c,f2);
t3=cal(t2,d,f3);
if (isEqual(t3,24))
{
char buf[50];
sprintf(buf,"((%d%c%d)%c%d)%c%d=24",a,op[f1],b,op[f2],c,op[f3],d);
Memo1->Lines->Add(buf);
count++;
}
// 第2种情况(a 。b)。(c。 d) :
div0=false;
t1=cal(a,b,f1);
t2=cal(c,d,f3);
t3=cal(t1,t2,f2);
if (isEqual(t3,24))
{
char buf[50];
sprintf(buf,"(%d%c%d)%c(%d%c%d)=24",a,op[f1],b,op[f2],c,op[f3],d);
Memo1->Lines->Add(buf);
count++;
}
// 第3种情况 (a。(b。c))。d :
div0=false;
t1=cal(b,c,f2);
t2=cal(a,t1,f1);
t3=cal(t2,d,f3);
if (isEqual(t3,24))
{
char buf[50];
sprintf(buf,"(%d%c(%d%c%d))%c%d=24",a,op[f1],b,op[f2],c,op[f3],d);
Memo1->Lines->Add(buf);
count++;
}
// 第4种情况 a。((b。c)。d ) :
div0=false;
t1=cal(b,c,f2);
t2=cal(t1,d,f3);
t3=cal(a,t2,f1);
if (isEqual(t3,24))
{
char buf[50];
sprintf(buf,"%d%c((%d%c%d)%c%d)=24",a,op[f1],b,op[f2],c,op[f3],d);
Memo1->Lines->Add(buf);
count++;
}
// 第5种情况 a。(b。(c。d)) :
div0=false;
t1=cal(c,d,f3);
t2=cal(b,t1,f2);
t3=cal(a,t2,f1);
if (isEqual(t3,24))
{
char buf[50];
sprintf(buf,"%d%c(%d%c(%d%c%d))=24",a,op[f1],b,op[f2],c,op[f3],d);
Memo1->Lines->Add(buf);
count++;
}
}
}
if (count==0)
{
String s=String(v[0])+","+String(v[1])+","+
String(v[2])+","+String(v[3])+" 不能算出24";
Memo1->Lines->Add(s);
}
}
//---------------------------------------------------------------------------
BCBPLC
2012-06-27
打赏
举报
回复
我已从百度上搜到24点程序
4/(1-(5/6))=24
6/((5/4)-1)=24
-----------------
8/(3-(8/3))=24
------
呵呵,分数计算
bigfog
2012-06-27
打赏
举报
回复
1,4,5,6
3,8,3,8
需要用小数才能计算出来
BCBPLC
2012-06-26
打赏
举报
回复
1,4,5,6
3,8,3,8
能不能呀,好象不能嘛
24点
算法
讲解与实现
本文介绍了一种高效求解
24点
问题的
算法
,通过对所有数字和操作符的组合进行穷举,确保找到所有可能的解。
算法
考虑了数字的位置变化及重复情况,平均能在0.1秒内完成计算。
最
简单
24点
算法
,可任意实现n数n点,一看就明!
本文提出了一种暴力枚举法解决
24点
游戏问题,能够处理任意数量的数字凑成特定的目标值。通过枚举所有可能的运算符组合与数字排列,构建后缀表达式并验证是否满足目标值。
C++
24点
游戏
算法
本文介绍了
24点
游戏的
算法
实现,通过枚举运算符顺序和数字组合,判断是否能得出
24点
。文章详细展示了C++代码实现过程,包括dfs深度优先搜索函数和计算函数,用于解决给定4个1-10的数字通过加减乘除得到
24点
的问题。
24点
游戏
算法
本文介绍了
24点
游戏的两种
算法
实现。第一种通过穷举法列出所有可能的四数运算组合,包括括号的可能性;第二种
算法
通过两元运算递归地组合四个数字,避免了处理括号的问题。每种
算法
都提供了Python代码示例。
24点
游戏
算法
分析
本文深入探讨
24点
游戏的
算法
实现,采用递归和两元运算策略,全面覆盖组合可能性,确保解决方案的准确性和完整性。通过实例代码,详细解释了如何随机生成数字并寻找所有可能的
24点
表达式。
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章