试题编号: | 201903-2 |
---|---|
试题名称: | 二十四点 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
思路:
1.将四个数字和三个运算符分别用vector存储;
2.每次遍历运算符vector,寻找’x’或者’/’,然后进行运算,如果没有找到,则用第一个运算符进行运算;
3.每次运算后将参加运算的两个数字和运算符删去,在数字vector里对应位置插入运算结果;
4.一共算三次,结束后根据运算结果是否为24分别进行输出;
代码:
#include<iostream>
#include<vector>
using namespace std;
int operate(int a,char c,int b){
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='x') return a*b;
if(c=='/') return a/b;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
vector<int> num(4);
int pos,rs=0;
vector<char> op(3);
for(int j=0;j<3;j++){
scanf("%d",&num[j]);
scanf("%c",&op[j]);
}
scanf("%d",&num[3]);
for(int j=0;j<3;j++){
for(pos=0;pos<op.size()&&op[pos]!='x'&&op[pos]!='/';pos++);
if(pos==op.size()) pos=0;
rs=operate(num[pos],op[pos],num[pos+1]);
num[pos]=rs;
num.erase(num.begin()+pos+1);
op.erase(op.begin()+pos);
}
printf(rs==24?"Yes
":"No
");
}
return 0;
}