最后的24

来源:互联网 发布:黑帽seo视频教程 编辑:程序博客网 时间:2024/04/30 03:24
#include<iostream>
#include<math.h>


using namespace std;


int used[4]={0},flag=0;
double an[4],bn[4];
int search(int m);
double cal(double a,double b,int fu);//函数也要参与运算,也是double 
int pan(double a,double b,double c,double d);
int main()
{
int i;
for(i=0;i<4;i++)
cin>>an[i];
search(0);
if(flag==0)
cout<<"No"<<endl;
}
int search(int m)
{
int i,j;
if(m==4)
{
pan(bn[0],bn[1],bn[2],bn[3]);
for(j=0;j<4;j++)
{
if(used[j]!=0)
used[j]==0;

}
else
{
for(i=0;i<4;i++)
{
if(used[i]==0)
{
bn[m]=an[i];
used[i]=1;
search(m+1);
used[i]=0;
}
}
}
}
int pan(double a,double b,double c,double d)
{



int ce[4];
    int yun[3]={0,1,2};//+ - *
int i,j,k;
    ce[1]=b;
ce[2]=c;
ce[3]=d;
ce[0]=a;
   for(i=0;i<4;i++)
   {
    for(j=0;j<4;j++)
    {
    for(k=0;k<4;k++)
    {
   
    if(fabs(cal(cal(cal(ce[0],ce[1],i),ce[2],j),ce[3],k)-24)<0.000001&&flag==0)
    {
    cout<<"Yes"<<endl;
    flag=1; 
    return 0;
    }
    if(fabs(cal(cal(ce[0],ce[1],i),cal(ce[2],ce[3],j),k)-24)<0.0000001&&flag==0)
    {
    flag=1; 
    cout<<"Yes"<<endl;
    return 0;
   
    if(fabs(cal(cal(ce[0],cal(ce[1],ce[2],i),j),ce[3],k)-24)<0.000001&&flag==0)
    {
    flag=1;
    cout<<"Yes"<<endl;
    return 0;
    }
    if(fabs(cal(ce[0],cal(cal(ce[1],ce[2],i),ce[3],j),k)-24)<0.0000001&&flag==0)
    {
    flag=1;
    cout<<"Yes"<<endl;
    return 0;
    }
    if(fabs(cal(ce[0],cal(ce[1],cal(ce[2],ce[3],i),j),k)-24)<0.0000001&&flag==0)
    {
    flag=1;
    cout<<"Yes"<<endl;
    return 0;
    }
    }
    }
   }
   
   
       

double cal(double a,double b,int fu)
{
if(fu==0)
return(a+b);
else if(fu==1)
return(a-b);
 else if(fu==2)
return(a*b);
else if(fu==3&&b!=0)//是一个除号;被除数不为0
return(a/b);
else//要么回一个不可能达到的数 
return(10000);

}

再除法中,按照题目的定义,我们需要注意的问题是,被除数不等于0,且能被整除,如果不满足,就会一个永远不能到24得数

再这个题目中,由于出现了分数,所以采用绝对值得形式处理,这是不用满足整除条件,但是,必须要把该变成double的变成double,比如cal函数





原创粉丝点击