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

📄 head.cpp

📁 一个二十四点的游戏
💻 CPP
字号:
#include "node.cpp"
#include <stack>


node cacl(node &x,node &y, node &s)   
{  
   node tmp;
   switch(s.sign)
   {
     case '+': tmp.Fr=x.Fr+y.Fr;
               break; 
     case '-': tmp.Fr=x.Fr-y.Fr;
               if(tmp.Fr.fz<0)tmp='!';              
               break; 
     case '*': tmp.Fr=x.Fr*y.Fr;
               break; 
     case '/': if(y.Fr.fz==0)
               {
                 tmp='!';
                 break;
               }  
               tmp.Fr=x.Fr/y.Fr;
               break; 
   }
   return tmp;
}    

int Sq(const node &x) //计算符号优先级 
{
  if(x.sign=='(')return 5;
  if(x.sign=='*'||x.sign=='/')return 4;
  if(x.sign=='+'||x.sign=='-')return 3;
  if(x.sign==')')return 2;
  return 1;
}     


bool caclexp(node e[])   //计算存放在数组中的表达式
{
  node x1,x2,x3,x4,s;
  stack<node> numbers,signs;
  int i;
  signs.push(e[0]);  //第一个'#'进栈
  for(i=1;i<19;i++)
  {
    s=signs.top();  
    if(e[i].sign=='^')continue;
    if(!e[i].s)numbers.push(e[i]);  //如果是运算数则进栈
    else{
          if(Sq(s)>=Sq(e[i]))      //栈顶运算符优先级更大时
          {
            if(s.sign=='#'&&e[i].sign=='#')break; //如遇到最后一个'#'运算结束
            if(s.sign=='(')
            {  
               if(e[i].sign==')'){
                                    signs.pop();
                                    continue;
                                 }
               signs.push(e[i]);
               continue;
            }
            x2=numbers.top(); numbers.pop();
            x1=numbers.top(); numbers.pop();
            x3=signs.top();signs.pop();
            x4=cacl(x1,x2,x3);
            if(x4.sign=='!')return 0;  //有非法运算 
            numbers.push(x4);
            i--; 
            continue;
          }
          signs.push(e[i]);  //栈顶运算符更小时运算符进栈
        }
  }
  x4=numbers.top(); 
  return(x4.Fr.fz==x4.Fr.fm*24);
}          
          
 
void prexp(node e[])   //输出一个存放在数组中的表达式
{
    int i;
    for(i=1;i<18;i++)
    {  
      if(e[i].sign=='^')continue;
      if(e[i].s)cout<<e[i].sign;
      else cout<<e[i].Fr.fz;
    }
    cout<<"=24"<<endl;
}                      
          
          
             
            
            
            
            
                                 
         
          
  

⌨️ 快捷键说明

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