欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

24点游戏实现

程序员文章站 2024-01-29 12:50:34
...

一、题目要求(24点游戏是经典的纸牌益智游戏)
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。
(其中,J代表11,Q代表12,K代表13,A代表1)
按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风良好(使用自定义注释模板)
2.列出表达式无重复
二、代码实现

#include<iostream>
using namespace std;
int MAXSIZE1=1,MAXSIZE2=1,p;
class abc
{
 public:
  float  num[432][4],cord[432][4];
};   
abc emmm0(int n, int m,abc A,abc B)    //n表示对象B里的数据个(组)数,m表示每组数据的个数例(4,3,2,1),产生新的对象A 
{                                       //i表示存入数组的数的序号下标,j表示被操作数组的第几组数, 
 int i=0,flag,j=0,k,ch=0,j0,q,d;          //ch,k表示被操作数组的的第几组数的记几个元素的下标
    for(j=0;j<n;j++)                              //q表示传递符号和数据时的下标 
 {  
    for(d=(p==0)?0:2; d<3;d++)
    {
     for(  k=1; k<m; k++,i++)           //1:+ 2:* 3:-(1) 4:-(2) 5:/(1) 6:/(2) 
  {         
   A.num[i][0]=B.num[j][ch]+B.num[j][k];                // +
   flag=(p==0)?0:1;             
   for(int h=1; h<m; h++,flag++)                    //将除过运算数据外的其他数据存入新的对象 
      {
    if(flag!=k)
        A.num[i][h]=B.num[j][flag];
    else
        h--;
   } 
   
   if(p!=0)
   {
    for( q=0; q<2*(4-m); q++)                         //将当前符号标记输入进cord数组  
        A.cord[i][q]=B.cord[j][q]; 
    A.cord [i][6]=B.cord[j][6]; 
    A.cord[i][q]=A.num[i][0]; 
       A.cord[i][++q]=1;  
    
    if(p==2&&A.num[i][0]==24)                     //最后一次调用时解决数组越界问题 
           i=i;
       else if(p==2&&A.num[i][0]!=24) i--;
   }  
   else                                              //第一次调用函数时将数据和字符一同传入 
   {   
       j0=0;
       A.cord[i][j0]=B.num[j][ch];
    A.cord[i][++j0]=1; 
    A.cord[i][6]=B.num[j][k];  
   }
                      
   A.num[++i][0]=B.num[j][ch]*B.num[j][k];           // *
   flag=(p==0)?0:1;               
   for(int h=1; h<m; h++,flag++ )
   {
    if(flag!=k)
        A.num[i][h]=B.num[j][flag];
    else
        h--;
   }
   if(p!=0)
   {
    for( q=0; q<2*(4-m); q++)                         //将当前符号标记输入进cord数组 
        A.cord[i][q]=B.cord[j][q];
    A.cord [i][6]=B.cord[j][6];  
    A.cord[i][q]=A.num[i][0];
       A.cord[i][++q]=2;      
    if(p==2&&A.num[i][0]==24)
          i=i;
          else if(p==2&&A.num[i][0]!=24) i--;
   }
   else                                              //第一次调用函数时将数据和字符一同传入 
   {   
       j0=0;
       A.cord[i][j0]=B.num[j][ch];
    A.cord[i][++j0]=2; 
    A.cord[i][6]=B.num[j][k];         
   }
   
   A.num[++i][0]=B.num[j][ch]-B.num[j][k];          // -
   flag=(p==0)?0:1;               
   for(int h=1; h<m; h++,flag++ )
      {
    if(flag!=k)
        A.num[i][h]=B.num[j][flag];
    else
        h--;
   }
   if(p!=0)
   {
    for( q=0; q<2*(4-m); q++)  
        A.cord[i][q]=B.cord[j][q];
    A.cord [i][6]=B.cord[j][6];         
    A.cord[i][q]=A.num[i][0];
    A.cord[i][++q]=3;
          if(p==2&&A.num[i][0]==24)
           i=i;
          else if(p==2&&A.num[i][0]!=24) i--;
   }
      else                                              //第一次调用函数时将数据和字符一同传入 
   {   
       j0=0;
       A.cord[i][j0]=B.num[j][ch];
    A.cord[i][++j0]=3;
    A.cord[i][6]=B.num[j][k];        
   }
               
   A.num[++i][0]=B.num[j][k]-B.num[j][ch];            // -
   flag=(p==0)?0:1;               
   for(int h=1; h<m; h++,flag++ )
      {
    if(flag!=k)
        A.num[i][h]=B.num[j][flag];
    else
        h--;
   }
   if(p!=0)
   {
    for( q=0; q<2*(4-m); q++) 
        A.cord[i][q]=B.cord[j][q]; 
    A.cord [i][6]=B.cord[j][6]; 
    A.cord[i][q]=A.num[i][0];
    A.cord[i][++q]=4;
          if(p==2&&A.num[i][0]==24)
          i=i;
          else if(p==2&&A.num[i][0]!=24) i--;
   }
   else                                              //第一次调用函数时将数据和字符一同传入 
   {   
       j0=0;
       A.cord[i][j0]=B.num[j][ch];
    A.cord[i][++j0]=4;
    A.cord[i][6]=B.num[j][k];          
   }                
   
   if(B.num[j][ch]>0||B.num[j][ch]<0)         // /
   {
          A.num[++i][0]=B.num[j][ch]/B.num[j][k];         
          flag=(p==0)?0:1;              
    for(int h=1; h<m; h++,flag++ )
       {
     if(flag!=k)
         A.num[i][h]=B.num[j][flag];
     else
         h--;
    }
    if(p!=0)
    {
     for( q=0; q<2*(4-m); q++) 
         A.cord[i][q]=B.cord[j][q];
        A.cord [i][6]=B.cord[j][6];
           A.cord[i][q]=A.num[i][0];
     A.cord[i][++q]=5;
     if(p==2&&A.num[i][0]==24)
           i=i;
         else if(p==2&&A.num[i][0]!=24) i--;
    }
    else                                              //第一次调用函数时将数据和字符一同传入 
   {   
       j0=0;
       A.cord[i][j0]=B.num[j][ch];
    A.cord[i][++j0]=5; 
    A.cord[i][6]=B.num[j][k];           
   }
      
     }    
    
   if(B.num[j][ch]>0||B.num[j][ch]<0){
   
   A.num[++i][0]=B.num[j][k]/B.num[j][0];             // /
   flag=(p==0)?0:1;              
   for(int h=1; h<m; h++ ,flag++)
      {
    if(flag!=k)
        A.num[i][h]=B.num[j][flag];
    else
        h--;
   }
   if(p!=0)
   {  
    for( q=0; q<2*(4-m); q++)
        A.cord[i][q]=B.cord[j][q];
    A.cord [i][6]=B.cord[j][6];
    A.cord[i][q]=A.num[i][0];
    A.cord[i][++q]=6;
          if(p==2&&A.num[i][0]==24)
          i=i;
       else if(p==2&&A.num[i][0]!=24) i--;
   }
   else                                              //第一次调用函数时将数据和字符一同传入 
   {   
       j0=0;
       A.cord[i][j0]=B.num[j][ch];
    A.cord[i][++j0]=6; 
    A.cord[i][6]=B.num[j][k];            
   }    
   }
    }
  
  }
    } 
 return A;
}
int main()
{
 int i=0,n,j,k,sum=0,a[4]={6,6,6,6};
 abc a0;
 for( i=0;i<4;i++)
  a0.num[0][i]=a[i];
 abc a1,a2,a3; 
 p=0;
 a1=emmm0(1,4,a1,a0);  
 p=1;
 a2=emmm0(36,3,a2,a1);
 p=2;
 a3=emmm0(432,2,a3,a2); 
 for(i=0;i<500;i++)
 {
  if(a3.num[i][0]==24)
  { 
      cout<<endl; 
   cout<<a3.num[i][0]<<endl;
   cout<<"数据:"<<a3.cord[i][0]<<" "<<a3.cord[i][6]<<" "<<a3.cord[i][2]<<" "<<a3.cord[i][4]<<" "<<endl<<"符号";
   for(int j=0;j<7;j++)
   {   if(j%2==1)
         switch((int)a3.cord[i][j])
      {
       case 1:  cout<<"+"<<" ";   break;
       case 2:  cout<<"*"<<" ";   break;
       case 3:  cout<<"-"<<" ";   break;
       case 4:  cout<<"-"<<" ";   break;
       case 5:  cout<<"/"<<" ";   break;
          case 6:  cout<<"/"<<" ";   break;
        }
   } 
            sum++;
  } 
 }
 cout<<"共"<<sum<<"种算法";
 return 0;
} 

三、算法构造
24点游戏实现
四、调试及运行
24点游戏实现