计算24点

#include<iostream>

using namespace std;

typedef struct node

{

 double bev;//数

 char ser[15];//表达式

 int length;//表达式长度

}Bnode;

Bnode dev_4[4];//四个数

Bnode dev_3[3];//三个数

Bnode dev_2[2];//两个数

Bnode dev_1;//一个数

char flag[4]={'+','-','/','*'};

Bnode count(Bnode d1,Bnode d2,char ch)

{

  Bnode d3;//临时存放数据

  d3.length=0;//初始化表达式长度

  switch(ch)

  {

      case '+':

    d3.bev=d1.bev+d2.bev;//计算数据

    d3.ser[d3.length++]='(';

    for(int i=0;i<=d1.length;i++)

    {

     d3.ser[d3.length++]=d1.ser[i];

    }

    d3.ser[d3.length++]='+';

    for(int i=0;i<=d2.length;i++)

    {

     d3.ser[d3.length++]=d2.ser[i];

    }

    d3.ser[d3.length]=')';

    break;

   case '-':

    d3.bev=d1.bev-d2.bev;//计算数据

    d3.ser[d3.length++]='(';

    for(int i=0;i<=d1.length;i++)

    {

     d3.ser[d3.length++]=d1.ser[i];

    }

    d3.ser[d3.length++]='-';

    for(int i=0;i<=d2.length;i++)

    {

     d3.ser[d3.length++]=d2.ser[i];

    }

    d3.ser[d3.length]=')';

    break;

   case '/':

    d3.bev=d1.bev/d2.bev;//计算数据

    d3.ser[d3.length++]='(';

    for(int i=0;i<=d1.length;i++)

    {

     d3.ser[d3.length++]=d1.ser[i];

    }

    d3.ser[d3.length++]='/';

    for(int i=0;i<=d2.length;i++)

    {

     d3.ser[d3.length++]=d2.ser[i];

    }

    d3.ser[d3.length]=')';

    break;

   case '*':

    d3.bev=d1.bev*d2.bev;//计算数据

    d3.ser[d3.length++]='(';

    for(int i=0;i<=d1.length;i++)

    {

     d3.ser[d3.length++]=d1.ser[i];

    }

    d3.ser[d3.length++]='*';

    for(int i=0;i<=d2.length;i++)

    {

     d3.ser[d3.length++]=d2.ser[i];

    }

    d3.ser[d3.length]=')';

    break;

  }

  return d3;

}

void fun(int dev[])

{

 for(int i=0;i<4;i++)//初始化结构体数组

 {

  dev_4[i].bev=dev[i];

  switch(dev[i])

  {

      case 1:dev_4[i].ser[0]='1';dev_4[i].length=0;break;

   case 2:dev_4[i].ser[0]='2';dev_4[i].length=0;break;

   case 3:dev_4[i].ser[0]='3';dev_4[i].length=0;break;

   case 4:dev_4[i].ser[0]='4';dev_4[i].length=0;break;

   case 5:dev_4[i].ser[0]='5';dev_4[i].length=0;break;

   case 6:dev_4[i].ser[0]='6';dev_4[i].length=0;break;

   case 7:dev_4[i].ser[0]='7';dev_4[i].length=0;break;

   case 8:dev_4[i].ser[0]='8';dev_4[i].length=0;break;

   case 9:dev_4[i].ser[0]='9';dev_4[i].length=0;break;

   case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;

   //case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;

   //case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;

   //case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;

   //case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;

  }

  //dev_4[i].ser[0]=dev[i];

  

 }

 for(int i=0;i<4;i++)//从四个数中选两个数运算 i

 {

     for(int j=0;j<4;j++)// j

  {

   if(j==i) continue;//防止两个数重复

   else

   {

    for(int n=0;n<4;n++)//加载三个数字的运算 n,选择运算符

    {

           dev_3[0]=count(dev_4[i],dev_4[j],flag[n]);

     int mm=1;//加载辅助

     for(int m=0;m<4;m++)//m,加载其他两个数

     {

         if(m!=i&&m!=j)

      {

          dev_3[mm++]=dev_4[m];

      }

     }

     //dev_3已经加载完毕,开始三个数的计算

     for(int ii=0;ii<3;ii++)//从三个数中选择两个数运算 ii

     {

         for(int jj=0;jj<3;jj++)

      {

          if(jj==ii) continue;//防止两个数重复

       else

       {

           for(int nn=0;nn<4;nn++)

        {

            dev_2[0]=count(dev_3[ii],dev_3[jj],flag[nn]);

         for(int m=0;m<3;m++)//m,加载剩余数

         {

          //int mm=1;//加载辅助

          if(m!=ii&&m!=jj)

          {

           dev_2[1]=dev_3[m];

          }

         }

         for(int nnn=0;nnn<4;nnn++)

         {

          dev_1=count(dev_2[0],dev_2[1],flag[nnn]);

          if(abs(dev_1.bev-24)<=0.000001) 

          {

           for(int s=0;s<4;s++)

            cout<<dev[s]<<' ';

           for(int w=0;w<=dev_1.length;w++)

           {

            cout<<dev_1.ser[w];

           }

           cout<<endl;

           goto lopo;

          }

             if(nnn!=0&&nnn!=3)

          {

           dev_1=count(dev_2[1],dev_2[0],flag[nnn]);

           if(abs(dev_1.bev-24)<=0.000001) 

           {

            for(int s=0;s<4;s++)

                cout<<dev[s]<<' ';

            for(int w=0;w<=dev_1.length;w++)

            {

             cout<<dev_1.ser[w];

            }

            cout<<endl;

            goto lopo;

           }

          }

         }

         

        }

       }

      }

     }

    }

   }

  }

 }

lopo:

 ;



}



int main()

{

 int dev[4];//四个数

    for(int i=1;i<=10;i++)

 {

  dev[0]=i;

  for(int j=i;j<=10;j++)//j=i为防止出现重复,下同n=j,m=n

  {

   dev[1]=j;

   for(int n=j;n<=10;n++)

   {

    dev[2]=n;

    for(int m=n;m<=10;m++)

    {

     dev[3]=m;

        fun(dev);

    }

   }

  }

 }

 //fun(dev);

 //cout<<8.0/(3-8.0/3)<<endl;

 system("pause");

    return 0;

}

  

你可能感兴趣的:(计算)