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 ...
随机推荐
- JQUERY相关
https://github.com/mythz/jquip/ http://zeptojs.com/ http://devework.com/jquery-builder.html http://p ...
- java replace和replaceAll
replace和replaceAll是JAVA中常用的替换字符的方法 public String replace(char oldChar, char newChar) 在字符串中用n ...
- 全球Top10最佳移动统计分析sdk
监视应用程序的分析帮助您优化您的移动应用程序的某些元素,它也给你正确的洞察到你的营销计划.没有手机的分析软件包会有缺乏必要的数据,以帮助你提高你的应用程序需要.如果你是一个软件开发者或出版商为Goog ...
- [CentOS] 指定命令别名:Alias & 软链接生成命令 ln -s
参考:CentOS里alias命令详解 每天一个linux命令(35):ln 命令 1. Alias命令 功能描述:我们在进行系统的管理工作一定会有一些我们经常固定使用,但又很长的命令.那我们可以给这 ...
- react参考项目001
https://github.com/chen2009277025/webpack-ant-design-demo https://github.com/cobish/cobish.github.io ...
- tomcat安全加固
-R 640 conf/*3. 首次安装完成后立即删除webapps下面的所有代码rm -rf /srv/apache-tomcat/webapps/*4. 注释或删除 tomcat-users.xm ...
- The different of mouseover and mouseenter
l论事件onmouseover 和 onmouseenter:同类比较onmouseout 和 onmouseleave; 使用onmouseover时,鼠标除了被设置事件的元素,还会触发其子元素: ...
- 总结四条对学习Linux系统有帮助的方法
网络是一个很神奇的东西,现代人的生活离不开网络,网络已深入人们的工作,生活,娱乐等方方面面.网络之所以无处不在,是因为它提供了诸多的网络服务,所以网络服务是网络的灵魂. 互联网上的各种网络服务是架构在 ...
- SELECT INTO 和 INSERT INTO区别
(1).SELECT * INTO 新表名 FROM 旧表名 (2).INSERT INTO 新表名(列名1,列名2) SELECT * FROM 旧表名 第一句新表名不存在会自动创建, 第二句需创建 ...
- D. Game with Strings
http://codeforces.com/contest/355/problem/D 这道题问了一下学妹,难道说哥已经老了!!! 首先题意理解上有些问题 比如说 a b c b d ...