(1)题目描述

(2)算法思想
- 分别读入数值与运算符方便进行计算;
- 优先处理乘法与除法的计算,并且遵循从左至右的顺序;
- 当乘法与除法计算完毕后开始处理加减法得到最终的结果;
- 最终结果等于24则输出"Yes",否则输出"No",注意输出格式以及大小写。
(3)代码实现
#include<map>
#include<vector>
#include<iostream>
using namespace std;
int fun(int n1, int n2, char op) {
if(op=='+')
return n1+n2;
else if(op=='-')
return n1-n2;
else if(op=='x')
return n1*n2;
else
return n1/n2;
}
void calculate(vector<int> &n, vector<char> &op, int j) {
n[j]=fun(n[j],n[j+1],op[j]);
n.erase(n.begin()+j+1);
op.erase(op.begin()+j);
}
int main() {
int n;
cin>>n;
getchar();
int is24[n]= {0};
for(int i=0; i<n; i++) {
vector<char> op;
vector<int> number;
for(int j=0; j<4; j++) {
int tempn;
cin>>tempn;
number.push_back(tempn);
if(j!=3) {
char tempop;
cin>>tempop;
op.push_back(tempop);
}
}
for(int j=0; j<op.size(); j++) {
if(op[j]=='/' || op[j]=='x') {
calculate(number,op,j);
j=-1;
}
}
for(int j=0; j<op.size(); j++) {
if(op[j]=='+' || op[j]=='-') {
calculate(number,op,j);
j=-1;
}
}
if(number[0]==24)
is24[i]=1;
}
for(int i=0; i<n; i++) {
if(!is24[i])
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}