逐一列举法…
#include <iostream>
using namespace std;
int Result(int a, int b, char s);
int main(void)
{
int n;
char x1, y1, z1;
char x2, y2, z2;
int a1, b1, c1, d1;
int a2, b2, c2, d2;
int sum = 0;
int flag1 = 0, flag2 = 0, flag3 = 0; //记录计算次数
cin >> n;
while(n--)
{
cin >> a1 >> x1 >> b1 >> y1 >> c1 >> z1 >> d1;
//cout << a1 << x1 << b1 << y1 << c1 << z1 << d1 << endl;
if(x1 == 'x' || x1 == '/')
{
a2 = Result(a1, b1, x1);
flag1 ++;
}
else
{
a2 = a1;
x2 = x1;
}
if(y1 == 'x' || y1 == '/')
{
if(flag1 == 0)
b2 = Result(b1, c1, y1);
else if(flag1 == 1)
{
a2 = Result(a2, c1, y1);
}
flag2 ++;
}
else
{
if(flag1 == 0)
{
b2 = b1;
y2 = y1;
}
else if(flag1 == 1)
{
x2 = y1;
}
}
if(z1 == 'x' || z1 == '/')
{
if(flag1 == 0 && flag2 == 0)
{
c2 = Result(c1, d1, z1);
}
else if(flag1 == 1 && flag2 == 1)
{
a2 = Result(a2, d1, z1);
}
else if(flag1 == 0 && flag2 == 1)
{
b2 = Result(b2, d1, z1);
}
else if(flag1 == 1 && flag2 == 0)
{
b2 = Result(c1, d1, z1);
}
flag3 ++;
}
else
{
if(flag1 == 0 && flag2 == 0)
{
c2 = c1;
z2 = z1;
d2 = d1;
}
else if(flag1 == 1 && flag2 == 1)
{
x2 = z1;
b2 = d1;
}
else if(flag1 == 1 && flag2 == 0)
{
b2 = c1;
y2 = z1;
c2 = d1;
}
else if(flag1 == 0 && flag2 == 1)
{
y2 = z1;
c2 = d1;
}
}
int flag = flag1 + flag2 + flag3;
if(flag == 0)
{
sum = Result(a2, b2, x2);
sum = Result(sum, c2, y2);
sum = Result(sum, d2, z2);
}
else if(flag == 1)
{
sum = Result(a2, b2, x2);
sum = Result(sum, c2, y2);
}
else if(flag == 2)
{
sum = Result(a2, b2, x2);
}
else if(flag == 3)
{
sum = a2;
}
if(sum == 24)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
flag1 = 0;
flag2 = 0;
flag3 = 0;
}
return 0;
}
int Result(int a, int b, char s)
{
int c;
if(s == 'x')
{
c=a*b;
}
else if(s == '/')
{
c=a/b;
}
else if(s == '+')
{
c=a+b;
}
else if(s == '-')
{
c=a-b;
}
return c;
}