zoukankan      html  css  js  c++  java
  • 计算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;
    }
    

      

  • 相关阅读:
    二分图那套理论
    洛谷P4351 [CERC2015]Frightful Formula【组合计数】
    「AGC023E」Inversions【组合计数】
    类欧几里得算法及其拓展
    OLAP 一些扯淡
    auto vectorized case shift
    备忘录
    lambda function pointer
    C++ atomic
    gdb 使用了 O0 但是还是有 <optimized out>
  • 原文地址:https://www.cnblogs.com/lyunyu/p/3191430.html
Copyright © 2011-2022 走看看