⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24点.cpp

📁 一个二十四点的游戏
💻 CPP
字号:
                      /*  24点运算程序  */


///////////////////////////////////////////////////////////////
#include "head.cpp"



int main()
{   
    int i1,i2,i3,i4, 
        j1,j2,j3,f=0,
        k1,k2,x;
    int num[4],tmp1[4];                 //运算数字及临时存放数组 
    char sg[]={'*','/','+','-'};        //运算符 
    node ex[19]={'#','^','^',0,0,
                 '^','^',0,'^',0,
                 '^',0,'^','^',0,
                 0,'^','^','#'};        //存放表达式
    bool vflag[]={0,0,0,0};             //num[i]有无被访问过的标记
    int fvposition[]={0,0,0,0};         //访问起始标记 
    int lvposition[]={0,0,0,0};         //上一轮访问位置
    int times[]={6,2,1,0};              //访问起始标志变化的轮回数
   
    cout<<"你可以输入任意4个大小不限的正整数,不要输入字母"<<endl;
    for(i1=0;i1<4;i1++)
    {
      cin>>num[i1];
      if(num[i1]<=0){
                    cout<<"输入要大于零,请重新输入"<<endl;
                    i1--;
                    continue;
                    }
    }   
    
    for(x=i1=0;i1<4;i1++)
    { 
      for(i2=fvposition[i1];i2<4;i2++)    //挑选赋值 
      {
        if(vflag[i2])continue;           //值未被访问过 
        tmp1[i1]=num[i2];           //赋值
        vflag[i2]=1;                //访问标记置1
        lvposition[i1]=i2;          //记录本轮各访问位置
        break;
      }
      if(i1==3){                          
                 x++;
                 for(i3=0;i3<4;i3++)ex[4*i3+3]=tmp1[i3]; //一次运算数赋值
                 for(j1=0;j1<4;j1++)
                 {
                   for(j2=0;j2<4;j2++)
                   {
                     for(j3=0;j3<4;j3++)
                     { 
                       ex[4]=sg[j1];
                       ex[9]=sg[j2];
                       ex[14]=sg[j3];    //加运算符
                       for(k1=2;k1<11;k1+=4)  //一对括号的情况 
                       { 
                         for(k2=k1+6;k2<17;k2+=4)
                         { 
                           ex[k1]='(';
                           ex[k2]=')';
                           if(caclexp(ex))
                           { 
                             if(k1==2&&k2==16)ex[2]=ex[16]='^';
                             prexp(ex);
                             f=1;
                             goto result;
                           }
                           ex[k1]=ex[k2]='^';  //还原 
                          }    
                        }
                        for(k1=1;k1<6;k1+=4)  //加两个括号的情况 
                        {
                          for(k2=k1+1;k2<k1+6;k2+=4)
                          { 
                            ex[k1]=ex[k2]='(';
                            ex[k1+12]=ex[k2+6]=')';
                             if(caclexp(ex))  //计算结果是否为24 
                             {  
                              prexp(ex); //输出表达式 
                              f=1;
                              goto result;
                             } 
                            ex[k1]=ex[k1+12]=ex[k2]=ex[k2+6]='^'; 
                          }
                        }
                        ex[1]=ex[10]='(';  //另一种两个括号的情况 
                        ex[8]=ex[16]=')';
                        if(caclexp(ex))
                        {  
                           prexp(ex);
                           f=1;
                           goto result;
                        } 
                        ex[1]=ex[10]='^';
                        ex[8]=ex[16]='^';
                      }
                    }
                  }      //一轮计算完毕  
                 if(x==24)break;
                 for(i3=0;i3<4;i3++)             //改变下一轮起始访问地点 
                 {
                   if(!(x%times[i3]))            
                   {
                     fvposition[i3]=lvposition[i3]+1;   //根据上轮访问位置置下一轮访问起始位置 
                     for(i4=i3+1;i4<4;i4++)fvposition[i4]=0;  
                     break;
                   }
                 }   
                 for(i3=0;i3<4;i3++)vflag[i3]=0;                   
                 i1=-1;
               }
        }       
     result: if(!f)cout<<"无解"<<endl;
             system("PAUSE");	
             return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -