社区
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点数)
...全文
303
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
能不能呀,好象不能嘛
相似图片搜索原理 Java实现源码
Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常
简单
易懂。...这是一个最
简单
的实现。
什么是
算法
?
算法
有哪些特性?
例如,新学期开学,从家到学校的交通方式这个问题就有很多解决方案:有的学生乘坐火车,有的学生乘坐汽车,有的学生乘坐飞机,在本市的可能会自己开车或乘坐公共汽车,离学校近的可能会步行来学校。这里每一种方案...
什么是KNN
算法
?
KNN(K-Nearest Neighbor)
算法
是机器学习
算法
中最基础、最
简单
的
算法
之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN
算法
的思想非常
简单
:对于任意n维输入向量,分别对应于...
最
简单
24点
算法
,可任意实现n数n点,一看就明!
网上的
24点
算法
基本上都专注于4张牌凑
24点
,有的
算法
甚至枚举了所有括号的组合,让人看得头晕眼花。这些
算法
若是推广到n个数凑n点,基本都歇菜了。 丧心病狂如这位:...
算法
该不该刷?如何高效刷
算法
?
算法
该不该刷?如何高效刷
算法
?
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章