很久前写了一个24点的算法,刚好POJ上也有个24点,顺便给解了,POJ上的相对于我原始来写的较为简单许多,因为,限制了数字的位置固定,实际上24点的话是不可能限制这个固定的,所以我之前会对数据进行一次排列,4个数据,按照位置不同的话就会有24种排列4*3*2*1 ,这个算法因为位置固定,而且只需要求一个解就可以,总体来说简单不少,下面贴代码

#include <iostream>
#include <algorithm> using namespace std; int fun3(double a,double b,double c,double d) // a t (b t (c t d))
{ int i,j,k;
double temp1,temp2,result1,result2;
for(i=;i<;i++)
for(j=;j<;j++)
for(k=;k<;k++)
{
switch(i)
{
case : temp1=c+d;
break;
case :temp1=c-d;
break;
case :temp1=c*d;
break;
case :temp1=c/d;
break;
}
switch(j)
{
case : temp2=b+temp1;
break;
case :temp2=b-temp1;
break;
case :temp2=b*temp1;
break;
case :temp2=b/temp1;
break;
}
switch(k)
{
case : result1=a+temp2;
break;
case :result1=a-temp2;
break;
case :result1=a*temp2;
break;
case :result1=a/temp2;
break;
}
result2= (result1);
if( (result2-)>-0.00001&& (result2-)<0.00001)
{
char e,f,g;
switch(i)
{
case :e='+';
break;
case :e='-';
break;
case :e='*';
break;
case :e='/';
break;
}
switch(j)
{
case :f='+';
break;
case :f='-';
break;
case :f='*';
break;
case :f='/';
break;
}
switch(k)
{
case : g='+';
break;
case :g='-';
break;
case :g='*';
break;
case :g='/';
break;
} cout<<a<<g<<"("<<b<<f<<"("<<c<<e<<d<<")"<<")"<<endl;
return ;
}
}
return ; }
int fun22(double a,double b,double c,double d) //a t ((b t c) t d)
{ int i,j,k;
double temp1,temp2,result1,result2;
for(i=;i<;i++)
for(j=;j<;j++)
for(k=;k<;k++)
{
switch(i)
{
case : temp1=b+c;
break;
case :temp1=b-c;
break;
case :temp1=b*c;
break;
case :temp1=b/c;
break;
}
switch(j)
{
case : temp2=temp1+d;
break;
case :temp2=temp1-d;
break;
case :temp2=temp1*d;
break;
case :temp2=temp1/d;
break;
}
switch(k)
{
case : result1=a+temp2;
break;
case :result1=a-temp2;
break;
case :result1=a*temp2;
break;
case :result1=a/temp2;
break;
}
result2= (result1);
if( (result2-)>-0.00001&& (result2-)<0.00001)
{
char e,f,g;
switch(i)
{
case :e='+';
break;
case :e='-';
break;
case :e='*';
break;
case :e='/';
break;
}
switch(j)
{
case :f='+';
break;
case :f='-';
break;
case :f='*';
break;
case :f='/';
break;
}
switch(k)
{
case : g='+';
break;
case :g='-';
break;
case :g='*';
break;
case :g='/';
break;
} cout<<a<<g<<"("<<"("<<b<<e<<c<<")"<<f<<d<<")"<<endl;
return ;
}
}
return ; }
int fun2(double a,double b,double c,double d) //(a t (b t c)) t d
{ int i,j,k;
double temp1,temp2,result1,result2;
for(i=;i<;i++)
for(j=;j<;j++)
for(k=;k<;k++)
{
switch(i)
{
case : temp1=b+c;
break;
case :temp1=b-c;
break;
case :temp1=b*c;
break;
case :temp1=b/c;
break;
}
switch(j)
{
case : temp2=a+temp1;
break;
case :temp2=a-temp1;
break;
case :temp2=a*temp1;
break;
case :temp2=a/temp1;
break;
}
switch(k)
{
case : result1=temp2+d;
break;
case :result1=temp2-d;
break;
case :result1=temp2*d;
break;
case :result1=temp2/d;
break;
}
result2= (result1);
if( (result2-)>-0.00001&& (result2-)<0.00001)
{
char e,f,g;
switch(i)
{
case :e='+';
break;
case :e='-';
break;
case :e='*';
break;
case :e='/';
break;
}
switch(j)
{
case :f='+';
break;
case :f='-';
break;
case :f='*';
break;
case :f='/';
break;
}
switch(k)
{
case : g='+';
break;
case :g='-';
break;
case :g='*';
break;
case :g='/';
break;
} cout<<"("<<a<<f<<"("<<b<<e<<c<<")"<<")"<<g<<d<<endl;
return ;
}
}
return ; }
int fun1(double a,double b,double c,double d) //(a t b)t(c t d)
{ int i,j,k;
double temp1,temp2,result1,result2;
for(i=;i<;i++)
for(j=;j<;j++)
for(k=;k<;k++)
{
switch(i)
{
case : temp1=a+b;
break;
case :temp1=a-b;
break;
case :temp1=a*b;
break;
case :temp1=a/b;
break;
}
switch(j)
{
case : temp2=c+d;
break;
case :temp2=c-d;
break;
case :temp2=c*d;
break;
case :temp2=c/d;
break;
}
switch(k)
{
case : result1=temp1+temp2;
break;
case :result1=temp1-temp2;
break;
case :result1=temp1*temp2;
break;
case :result1=temp1/temp2;
break;
}
result2= (result1);
if( (result2-)>-0.00001&& (result2-)<0.00001)
{
char e,f,g;
switch(i)
{
case :e='+';
break;
case :e='-';
break;
case :e='*';
break;
case :e='/';
break;
}
switch(j)
{
case :f='+';
break;
case :f='-';
break;
case :f='*';
break;
case :f='/';
break;
}
switch(k)
{
case : g='+';
break;
case :g='-';
break;
case :g='*';
break;
case :g='/';
break;
} cout<<"("<<a<<e<<b<<")"<<g<<"("<<c<<f<<d<<")"<<endl;
return ;
}
}
return ; }
int fun(double a,double b,double c,double d) //((a t b) t c) t d
{ int i,j,k;
double temp1,temp2,result1,result2;
for(i=;i<;i++)
for(j=;j<;j++)
for(k=;k<;k++)
{
switch(i)
{
case : temp1=a+b;
break;
case :temp1=a-b;
break;
case :temp1=a*b;
break;
case :temp1=a/b;
break;
}
switch(j)
{
case : temp2=temp1+c;
break;
case :temp2=temp1-c;
break;
case :temp2=temp1*c;
break;
case :temp2=temp1/c;
break;
}
switch(k)
{
case : result1=temp2+d;
break;
case :result1=temp2-d;
break;
case :result1=temp2*d;
break;
case :result1=temp2/d;
break;
}
result2= (result1);
if( (result2-)>-0.00001&& (result2-)<0.00001)
{
char e,f,g;
switch(i)
{
case :e='+';
break;
case :e='-';
break;
case :e='*';
break;
case :e='/';
break;
}
switch(j)
{
case :f='+';
break;
case :f='-';
break;
case :f='*';
break;
case :f='/';
break;
}
switch(k)
{
case : g='+';
break;
case :g='-';
break;
case :g='*';
break;
case :g='/';
break;
} cout<<"("<<"("<<a<<e<<b<<")"<<f<<c<<")"<<g<<d<<endl;
return ;
}
}
return ; }
int can24(int a,int b,int c,int d)
{
int res=;
res= fun(a,b,c,d);
if(res==)return res;
res= fun1(a,b,c,d);
if(res==)return res;
res= fun2(a,b,c,d);
if(res==)return res;
res= fun22(a,b,c,d);
if(res==)return res;
res= fun3(a,b,c,d);
if(res==)return res; return res;
}
int main(int argc, char* args[])
{
int a,b,c,d;
cin>>a>>b>>c>>d;
int res=can24(a,b,c,d);
return ;
};

比较笨,只会用穷举 。根据计算优先级 会有以下5种 t表示符号

((a t b)t c) t d      (a t b) t (c t d)     a t ((b t c) t d)       (a t (b t c)) t d  a t ((b t c) t d)  每种都写了一个函数

PKU 3983的更多相关文章

  1. PKu 2195

    //PKu 2195 回家 By Loli_con Enail : Loli_con@outlook.com /* 题目叙述 ========= 在一个网格图中,有n个人和n个房子.每一个单位时间,每 ...

  2. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  3. 【解题报告】PKU 2318 TOYS AND PKU 2398 Toy Storage

    题目连接: http://poj.org/problem?id=2318     http://poj.org/problem?id=2398 两题类似的题目,2398是2318的升级版. 题目大概是 ...

  4. pku,杨建武:文本挖掘技术

    http://webkdd.org/course/ http://www.icst.pku.edu.cn/lcwm/course/WebDataMining/ http://www.icst.pku. ...

  5. 【暑假】[深入动态规划]UVAlive 3983 Robotruck

     UVAlive 3983 Robotruck 题目: Robotruck   Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format ...

  6. BZOJ 3983 Takeover Wars 解题报告

    我猜了一个结论,能合并就合并,到了必须要敌对交易的时候才进行敌对交易. 然后合并的话,肯定是拿最大的两个去合并. 至于敌对交易,肯定是干掉对方最大的公司才是有意义的. 于是各种分类讨论...看代码好了 ...

  7. 刘汝佳黑书 pku等oj题目

    原文地址:刘汝佳黑书 pku等oj题目[转]作者:小博博Mr 一.动态规划参考资料:刘汝佳<算法艺术与信息学竞赛><算法导论> 推荐题目:http://acm.pku.edu. ...

  8. PKU 1276 Cash Machine

    <span style="color:#000099;">/* Cash Machine Time Limit: 1000MS Memory Limit: 10000K ...

  9. pku 1330 Nearest Common Ancestors LCA离线

    pku 1330 Nearest Common Ancestors 题目链接: http://poj.org/problem?id=1330 题目大意: 给定一棵树的边关系,注意是有向边,因为这个WA ...

随机推荐

  1. 使用scrapy创建工程

    前提:先创建一个文件夹用来存放爬虫工程 创建项目命令: scrapy startproject <project_name> 例子: scrapy startproject myproje ...

  2. JAVA字符串05之课程问题解决

    (一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...

  3. Redis学习笔记二

    学习Redis添加Object时,由于Redis只能存取字符串String,对于其它数据类型形容:Int,long,double,Date等不提供支持,因而需要设计到对象的序列化和反序列化.java序 ...

  4. redis + spring 集成

    1.pom <modelVersion>4.0.0</modelVersion> <groupId>com.x.redis</groupId> < ...

  5. Calculator(补)

    MyGitHub 刚刚开始时确实是连题目都看不懂= =,从第二行的新建类开始,就不知题目所云.所以我的困难比很多同学都要 开始得早一些--从题目第二行开始. 准确的说,当我按照题目要求新建了一个sca ...

  6. OC — (Foundation框架-NSDate)

    NSDate:是OC中处理日期时间的一个类,可以用来表示时间 获取当前的时间 NSDate *d = [NSDate date]; 创建日期时间对象 NSLog输出是当前时间 格林时间 格式化显示时间 ...

  7. java map的默认排序问题

    import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Tre ...

  8. artDialog 配置参数

    http://blog.csdn.net/techbirds_bao/article/details/8531083

  9. IIS 7.5 发布Web 网站步骤

    1. 添加删除程序中,点击打开或关闭Window 功能 , 如图 , 勾选: 2. 打开 vs开发工具 控置台程序 , 注册 aspnet_regiis -i 3.设置应用程序域为指定版本 4.设置应 ...

  10. Android按钮的各个样式设置

    安卓开发学习之014 Button应用详解(样式.背景.按钮单击.长按.双击.多击事件) 一.Button简介 按钮也是继承自TextView 二.XML定义方法 <Button android ...