当前位置: 代码迷 >> 综合 >> 二十四点
  详细解决方案

二十四点

热度:79   发布时间:2024-02-11 02:21:57.0

###版本一#### 

#include <bits/stdc++.h>
using namespace std;
int nums[10],tt1;
char ops[10];int tt2;void cal()
{int b=nums[tt1--];int a=nums[tt1--];char ch=ops[tt2--];if(ch=='+') a+=b;if(ch=='-') a-=b;if(ch=='x') a*=b;if(ch=='/') a/=b;nums[++tt1]=a;
}bool prior(char c)
{char ch=ops[tt2];if(ch=='x'||ch=='/')return 1;if( (ch=='+'||ch=='-' )&& (c=='+'||c=='-'))   return 1;return 0;        
}
int value()
{string s;cin>>s;nums[++tt1]=s[0]-48;ops[++tt2]=s[1];for(int i=2;i<7;i++){if(i%2==0) nums[++tt1]=s[i]-48;if(i%2){if(prior(s[i]))  cal();ops[++tt2]=s[i];}}while(tt2>0) cal();return nums[tt1--];
}int main()
{int n;cin>>n;while(n--){if(value()==24) cout<<"Yes"<<endl;else          cout<<"No"<<endl;}return 0;
}

###版本二####  

#include <bits/stdc++.h>
using namespace std;
stack<int> num;
stack<char> op;void cal()
{int b=num.top();num.pop();int a=num.top();num.pop();char ch=op.top();op.pop();if(ch=='+') a+=b;if(ch=='-') a-=b;if(ch=='x') a*=b;if(ch=='/') a/=b;num.push(a);
}bool prior(char c)
{char ch=op.top();if(ch=='x'||ch=='/')return 1;if( (ch=='+'||ch=='-' )&& (c=='+'||c=='-'))   return 1;return 0;        
}
int value()
{string s;cin>>s;num.push(s[0]-48);op.push(s[1]);for(int i=2;i<7;i++){if(i%2==0) num.push(s[i]-48);if(i%2){if(prior(s[i]))  cal();op.push(s[i]);}}while(!op.empty()) cal();return num.top();
}int main()
{int n;cin>>n;while(n--){if(value()==24) cout<<"Yes"<<endl;else          cout<<"No"<<endl;}return 0;
}

 

  相关解决方案