社区
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点数)
...全文
335
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
能不能呀,好象不能嘛
1000多种java
算法
大全源码包
1000多种java
算法
大全源码包
相似图片搜索原理 Java实现源码
Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常
简单
易懂。我们可以用一个快速
算法
,就达到基本的效果。 这里的关键技术叫做"感知哈希
算法
"(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。 这是一个最
简单
的实现。
什么是
算法
?如何学习
算法
?
算法
入门的学习路径
何为
算法
简单
的说,
算法
就是:解决问题的手段,并且是批量化解决问题的手段。 比如,我们想要从成都去北京,起点就是成都,终点就是北京。如何去?我们就可以称为
算法
。 因此选择不同的
算法
,那么虽然终点都是一样,但是性能以及效率就根据
算法
的优劣而决定的。因此,我们需要选择最优的
算法
,来实现我们的问题需求,来解决生活中的一些实际问题。那我们该如何进行
算法
的学习呢? 如何学习
算法
算法
的学习,可以根据自身的生活经验逐步积累,也可以通过有效的训练来逐步提高我们解决问题的能力,同时也是提升我们的逻辑思..
什么是
算法
?
😎🥳😎🤠😮🤖🙈💭🍳🍱在数字化时代,计算机已经成为人类生活中不可或缺的一部分。计算机能够帮助我们处理海量的数据,实现各种复杂的功能和任务,其中最关键的就是
算法
。
算法
是计算机科学中的基础学科,涉及众多的
算法
类型和应用场景,是实现程序功能的核心思想。无论是从事计算机编程、数据科学、人工智能等领域,还是想深入理解数字化时代的本质,了解和掌握
算法
都是必不可少的一步。在本篇博文中,我将会介绍
算法
的基本概念、原理和应用,帮助读者了解
算法
的重要性和使用方法,提高程序设计和开发的能力和水平。
工作中几乎用不到
算法
,为何要学
算法
?
前言 不知道你
有没有
发现,非
算法
类的岗位,工作之后几乎没有用到什么
算法
,为什么还要学
算法
?本文谈谈自己的看法,不供参考。 从用人者角度 毋庸置疑,面试是用来筛选候选人的,在这个僧多粥少的时候,就需要提高筛选条件,例如最常见的学历,不是说学历一般的人不好,而是总体来说,学历好的人里面挑选到合适的概率比较大而已,这就是现实。而面试题中,
算法
相比于其他记忆型的题目,就能很好的体现一个人的逻辑...
C++ Builder
13,874
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章