社区
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点数)
...全文
309
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
作业
写回复
配置赞助广告
用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
能不能呀,好象不能嘛
MoreWindows白话经典
算法
之七大排序第2版(高清)
冒泡排序是最基础的排序
算法
之一,其原理
简单
直观,通过不断比较相邻两个元素的大小并交换位置来实现排序。书中提供了冒泡排序的三种实现方式: - **冒泡排序1**:基本版本,通过双重循环完成排序。 - **冒泡排序2*...
1000多种java
算法
大全源码包
- **线性搜索**:最
简单
的搜索方式,遍历整个数组。 - **二分搜索**:在有序数组中查找元素,效率高。 - **深度优先搜索(DFS)**:用于图和树的遍历,常与回溯法结合。 - **广度优先搜索(BFS)**:同样用于图...
相似图片搜索原理 Java实现源码
Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常
简单
易懂。...这是一个最
简单
的实现。
JVM 有哪些垃圾回收
算法
?
JVM垃圾回收
算法
标记-清除
算法
该
算法
分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。也可以反过来先标记所有不需要被回收的对象,标记完成以后回收没有被...
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章