PKU 3983
很久前写了一个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的更多相关文章
- PKu 2195
//PKu 2195 回家 By Loli_con Enail : Loli_con@outlook.com /* 题目叙述 ========= 在一个网格图中,有n个人和n个房子.每一个单位时间,每 ...
- HDU——PKU题目分类
HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...
- 【解题报告】PKU 2318 TOYS AND PKU 2398 Toy Storage
题目连接: http://poj.org/problem?id=2318 http://poj.org/problem?id=2398 两题类似的题目,2398是2318的升级版. 题目大概是 ...
- pku,杨建武:文本挖掘技术
http://webkdd.org/course/ http://www.icst.pku.edu.cn/lcwm/course/WebDataMining/ http://www.icst.pku. ...
- 【暑假】[深入动态规划]UVAlive 3983 Robotruck
UVAlive 3983 Robotruck 题目: Robotruck Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format ...
- BZOJ 3983 Takeover Wars 解题报告
我猜了一个结论,能合并就合并,到了必须要敌对交易的时候才进行敌对交易. 然后合并的话,肯定是拿最大的两个去合并. 至于敌对交易,肯定是干掉对方最大的公司才是有意义的. 于是各种分类讨论...看代码好了 ...
- 刘汝佳黑书 pku等oj题目
原文地址:刘汝佳黑书 pku等oj题目[转]作者:小博博Mr 一.动态规划参考资料:刘汝佳<算法艺术与信息学竞赛><算法导论> 推荐题目:http://acm.pku.edu. ...
- PKU 1276 Cash Machine
<span style="color:#000099;">/* Cash Machine Time Limit: 1000MS Memory Limit: 10000K ...
- pku 1330 Nearest Common Ancestors LCA离线
pku 1330 Nearest Common Ancestors 题目链接: http://poj.org/problem?id=1330 题目大意: 给定一棵树的边关系,注意是有向边,因为这个WA ...
随机推荐
- 使用scrapy创建工程
前提:先创建一个文件夹用来存放爬虫工程 创建项目命令: scrapy startproject <project_name> 例子: scrapy startproject myproje ...
- JAVA字符串05之课程问题解决
(一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...
- Redis学习笔记二
学习Redis添加Object时,由于Redis只能存取字符串String,对于其它数据类型形容:Int,long,double,Date等不提供支持,因而需要设计到对象的序列化和反序列化.java序 ...
- redis + spring 集成
1.pom <modelVersion>4.0.0</modelVersion> <groupId>com.x.redis</groupId> < ...
- Calculator(补)
MyGitHub 刚刚开始时确实是连题目都看不懂= =,从第二行的新建类开始,就不知题目所云.所以我的困难比很多同学都要 开始得早一些--从题目第二行开始. 准确的说,当我按照题目要求新建了一个sca ...
- OC — (Foundation框架-NSDate)
NSDate:是OC中处理日期时间的一个类,可以用来表示时间 获取当前的时间 NSDate *d = [NSDate date]; 创建日期时间对象 NSLog输出是当前时间 格林时间 格式化显示时间 ...
- java map的默认排序问题
import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Tre ...
- artDialog 配置参数
http://blog.csdn.net/techbirds_bao/article/details/8531083
- IIS 7.5 发布Web 网站步骤
1. 添加删除程序中,点击打开或关闭Window 功能 , 如图 , 勾选: 2. 打开 vs开发工具 控置台程序 , 注册 aspnet_regiis -i 3.设置应用程序域为指定版本 4.设置应 ...
- Android按钮的各个样式设置
安卓开发学习之014 Button应用详解(样式.背景.按钮单击.长按.双击.多击事件) 一.Button简介 按钮也是继承自TextView 二.XML定义方法 <Button android ...