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 ...
随机推荐
- 本周psp(11月17-23)
本周psp进度 11月19号 内容 开始时间 结束时间 打断时间 净时间 发布读书笔记 11:05 11:25 0 20m 看构建之法书 9:50 10:48 5m 53m 11月20号 内容 开始时 ...
- linux配置3-安装tomcat
下载文件:apache-tomcat-7.0.73.tar.gz 通过共享传到Ubuntu, 复制到/tmp 解压 移动解压后的文件到到/opt/tomcat7,完成可见:/opt/tomcat7/a ...
- 【翻译】configuration changes与handler.post
原文地址 http://corner.squareup.com/2013/12/android-main-thread-2.html 在前一部分里面previous part ,我们深入挖掘了 loo ...
- Emacs下的中文输入
Emacs如此优秀的编辑器,如果输入中文不顺畅,不免遗憾.可惜现实是折腾很久也未必用得称心如意,作为一个重度(也许是中毒) Emacs使用者,根据个人经验写下此文,希望对同道中人有所帮助. 在Wind ...
- Web应用安全十大主动安全措施
这几天有空参加了360主办的第一届互联网安全大会(ISC 2013),除了现场看到FREEBUF现场微博号发的众多妹子之外,也听到了很多有趣的议题,比如TK分享的通过网络运营商缓存服务器偷渡,只需一台 ...
- Android系统的架构
android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 1.应用程序 Andr ...
- (满满的是硬货)Spring深入研究一IOC实现
IOC基于Java底层的反射机制实现 反射机制: 核心: Class cls = Class.forName(类名); Class ptypes[] = new Class[2]; ptypes[0] ...
- keep the bar green to keep the code clean——Junit详解(一)
测试用例 单元测试时每个开发人员必需掌握的,是保证开发过程中代码的准确性,无误性,保证代码质量.敏捷开发模式是先根据用户需求写测试用例,考虑基本所有用户所需要的情况,再写实现方法.单元测试有很多种,当 ...
- XP 安装不了framework 4.0 的解决方法
第一步: 如果是XP系统: 1.开始——运行——输入cmd——回车——在打开的窗口中输入net stop WuAuServ 2.开始——运行——输入%windir% 3.在打开的窗口中有个文件夹叫So ...
- vue.js2.0的独立构建和运行时构建
转自:https://jingsam.github.io/2016/10/23/standalone-vs-runtime-only-build-in-vuejs2.html?utm_source=t ...