很久前写了一个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. 在VMware8.0.4安装centos6.3出现蓝屏,显示“anaconda: Fatal IO error 104 (Connection reset by peer) on X server :1.0. install exited abnormally [1/1]”?

    解决方案:在创建虚拟机时选择“自定义(高级)”,然后点击“下一步”,在弹出的对话框中,在硬件兼容性该项选择 Workstation6.5-7.x.如果创建虚拟机时选择“标准”,默认的硬件兼容性将是Wo ...

  2. python 汇总

    TypeError: ReadExcelList() takes exactly 1 argument (2 given) 传入的参数有问题

  3. php知识案列

     n个不重复的随机数生成代码 <?php //range 是将1到100 列成一个数组 $numbers = range (1,100); //shuffle 将数组顺序随即打乱 shuffle ...

  4. synchronized和ReentrantLock

    一.什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默 ...

  5. merge,join,concat

    merge交集 join并集 concat axis=0 竖着连 axis=1 横着连

  6. java selenium (十四) 处理Iframe 中的元素

    有时候我们定位元素的时候,发现怎么都定位不了. 这时候你需要查一查你要定位的元素是否在iframe里面 阅读目录 什么是iframe iframe 就是HTML 中,用于网页嵌套网页的. 一个网页可以 ...

  7. struts2+spring+hibernte整合示例

    简单实现添加用户功能,仅供初学者参考,可自行扩展程序功能(增删改查). 这里贴下代码,需要的可以下载看(因为比较懒). applicationContext.xml <?xml version= ...

  8. .NET中的yield关键字

    浅谈yield http://www.cnblogs.com/qlb5626267/archive/2009/05/08/1452517.html .NET中yield关键字的用法 http://bl ...

  9. bzoj2006: [NOI2010]超级钢琴

    题意:给一个序列(n<=500000),要求选定k个不同区间,使得区间长度在L,R之间,并使得k个区间和之和最大,输出这个最大值. 刚拿到题的时候想的是,对于每个点,如果以它开头,那么之后的L- ...

  10. bzoj 3611: [Heoi2014]大工程

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...