一开始50分失败代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int q[4];
char op[5];
stack<int> stk;
bool isjiajian(char c){
if (c == '+' || c == '-') return true;
return false;
}
int xiabiao(int x){
for (int i = x - 1; i >= 0; i --)
if (op[i] == '+' || op[i] == '-' )
return i;
return 0;
}
int judge(char s[]){
for (int i = 0; i < 4; i ++)
q[i] = s[i * 2] - '0';
for (int i = 0; i < 3; i ++)
op[i] = s[i * 2 + 1];
int sum = 0;
for (int i = 0; i < 3; i ++){
int t = 0;
if (isjiajian(op[i]) && (i == 0 || op[xiabiao(i)] == '+')) sum += q[i];
if (isjiajian(op[i])){
if (i > 0)
if (op[xiabiao(i)] == '-')
sum -= q[i];
}
if (op[i] == 'X') q[i + 1] = q[i + 1] * q[i];
if (op[i] == '/') q[i + 1] = q[i + 1] / q[i];
}
if (op[xiabiao(3)] == '+') sum += q[3];
if (op[xiabiao(3)] == '-') sum -= q[3];
if (sum == 24) return 1;
return 0;
}
int main(){
int n;
scanf("%d", &n);
while(n --){
char s[10];
scanf("%s",s);
if (judge(s)) puts("Yes");
else puts("No");
}
return 0;
}
100分代码
#include <cstdio>
#include <iostream>
int judge(char s[])
{
int a[4], i, j;
char op[3];
for(i = 0; i < 4; i++)
a[i] = s[i * 2] - '0';
for(i = 0; i < 3; i++)
op[i] = s[i * 2 + 1];
int k = 3; /* 总共计算3次 */
/* 先计算乘(x)和除(/) */
for(i = 0; i < k; i++)
if(op[i] == 'x' || op[i] == '/') {
if(op[i] == 'x') a[i] = a[i] * a[i + 1];
else a[i] = a[i] / a[i + 1];
for(j = i + 1; j < k; j++) {
op[j - 1] = op[j];
a[j] = a[j + 1];
}
k--, i--;
}
/* 再计算加(+)和减(-) */
int ans = a[0];
for(i = 0; i < k; i++)
if(op[i] == '+') {
ans = a[i] + a[i + 1];
a[i + 1] = ans;
} else {
ans = a[i] - a[i + 1];
a[i + 1] = ans;
}
return ans == 24;
}
int main(void)
{
int n;
char s[7 + 1];
scanf("%d", &n);
while(n--) {
scanf("%s", s);
printf(judge(s) ? "Yes\n" : "No\n");
}
return 0;
}