0 效果
难点:仔细读题 如何把处理运算优先级
1 题目
2 思路
- 1 根据题目分别读入数字和符号存储在数组中;
- 2 根据符号,来讨论计算的优先级;
- 当第一个符号为+,-,第二个符号为x/时,优先计算第二个数和第三数的运算,得到结果ans
- 当第三个符号为x/时,优先计算ans和第四个数的运算
- 否则按照先后顺序计算
- 当第一符号为*/时,计算第一个数和第二数的运算,得到结果tempNum1
- 如果第二个符号是±,第三个符号为x/,优先计算第三个数和第四个数的运算得到结果tempNum2,再根据第二个符号计算tempNum1和tempNum2的运算
- 否则按照先后顺序计算
- 当第一个符号为+,-,第二个符号为x/时,优先计算第二个数和第三数的运算,得到结果ans
注意:乘号的表示是x,而不是*
3 代码
#include<cstdio>
int calNum(int a, int b, char c){
if(c == '+') return a + b;
else if(c == '-') return a - b;
else if(c == 'x') return a * b;
else if(c == '/') return a/b;
}
int main(){
int n;
char symbol[4];
int number[4];
scanf("%d", &n);
while(n--){
int num;
char s;
int ans = 0;
for(int i = 0;i < 4;i++){
scanf("%d", &num);
number[i] = num;
if(i == 3) break;
scanf("%c", &s);
symbol[i] = s;
}
if((symbol[1] == 'x' || symbol[1] == '/') && (symbol[0] == '+' || symbol[0] == '-') ){
ans = calNum(number[1], number[2], symbol[1]);
if(symbol[2] == 'x' || symbol[2] == '/'){
ans = calNum(ans, number[3], symbol[2]);
ans = calNum(ans, number[0], symbol[0]);
}else{
ans = calNum(ans, number[0], symbol[0]);
ans = calNum(ans, number[3], symbol[2]);
}
}else{
int tempNum1 = calNum(number[0], number[1], symbol[0]);
if((symbol[2] == 'x' || symbol[2] == '/') && (symbol[1] == '+' || symbol[1] == '-') ){
int tempNum2 = calNum(number[2], number[3], symbol[2]);
ans = calNum(tempNum1, tempNum2, symbol[1]);
}else{
ans = calNum(tempNum1, number[2], symbol[1]);
ans = calNum(ans, number[3], symbol[2]);
}
}
if(ans == 24) printf("Yes");
else printf("No");
//printf(" %d", ans);
if(n != 0) printf("\n");
}
return 0;
}
/*
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+4/5
*/