CCF201903-2
題目
評測100分代碼
#include<iostream>
#include<string>
using namespace std;
void print_ans(int* ans){
for(int i=0;i<4;i++){
cout<<ans[i]<<" ";
}
cout<<endl;
}
int* find(int j,int* ans){ //找出操作符前後兩個操作數
int * res = new int[2];
int p,q;
p = j / 2;
while(ans[p]==-100000){
p--;
}
q = j / 2 + 1;
while(ans[q]==-100000){
q++;
}
res[0] = p;
res[1] = q;
return res;
}
void fun(){
int n;
cin>>n;
char tmp = getchar();
int ans[4];
for(int i=0;i<n;i++){
string in;
cin>>in;
for(int i=0;i<4;i++){ //提取操作數
ans[i] = in[2*i] - '0';
}
for(int i=0;i<7;i++){
if(in[i] == 'x'){
int* res = find(i,ans);
int p =res[0];
int q = res[1];
ans[p] = ans[p] * ans [q]; //將結果保存在第一個操作數中,標記第二個操作數
ans[q] = -100000;
in[i] = 'q'; //標記操作符
}
if(in[i] == '/'){
int* res = find(i,ans);
int p =res[0];
int q = res[1];
ans[p] = ans[p] / ans [q];
ans[q] = -100000;
in[i] = 'q';
}
}
for(int i=0;i<7;i++){
if(in[i] == '+'){
int* res = find(i,ans);
int p =res[0];
int q = res[1];
ans[p] = ans[p] + ans [q];
ans[q] = -100000;
in[i] = 'q';
}
if(in[i] == '-'){
int* res = find(i,ans);
int p =res[0];
int q = res[1];
ans[p] = ans[p] - ans [q];
ans[q] = -100000;
in[i] = 'q';
}
}
for(int i=0;i<4;i++){
if(ans[i]!=-100000){ //找出最終結果
if(ans[i]==24)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
}
}
int main(){
fun();
}
/*
10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4x5
*/