我觉得就是dfs,写了很长,然后不知道错在哪,我个蒟蒻看不出来,在此麻烦有空的巨佬帮我看看错在哪
#include <bits/stdc++.h>
using namespace std;
int a[5];
struct note{
int a, b;
char oper;
int v;
};
// b数组记录结果
note b[5]; int k = 1;
bool flag = false;
void dfs(int len)
{
if (flag == true)
return;
// cout << len << endl;
// for (int i = 1; i <= 4; i++)
// cout << a[i] << " ";
// cout << endl;
if (len == 1)
{
for (int i = 1; i <= 4; i++)
{
if (a[i] != -1)
{
if (a[i] == 24)
{
flag = true;
for (int i = 1; i <= 4; i ++) // i 1~3,4
{
if (b[i].a != 0)
cout << b[i].a << b[i].oper << b[i].b << "=" << b[i].v << endl;
}
}
}
}
return;
}
else
{
// chose two
// +-*/
for (int i = 1; i <= 4; i++) // 任意选两个数
{
for (int j = 1; j <= 4; j++)
{
if (a[i] == -1 || a[j] == -1 || j == i)
continue;
for (int op = 1; op <= 4; op++) // 四个运算
{
int t1, t2;
if (op == 1)
{
t1 = a[i];
t2 = a[j];
a[i] = t1 + t2;
a[j] = -1;
b[k].a = t1; b[k].b = t2; b[k].oper = '+'; b[k].v = t1 + t2; k++;
dfs(len - 1);
a[i] = t1;
a[j] = t2;
k--; b[k].a = -1; b[k].b = -1; b[k].oper = '!'; b[k].v = 0;
}
else if (op == 2)
{
t1 = a[i];
t2 = a[j];
a[i] = t1 - t2;
a[j] = -1;
b[k].a = t1; b[k].b = t2; b[k].oper = '-'; b[k].v = t1 - t2; k++;
dfs(len - 1);
a[i] = t1;
a[j] = t2;
k--; b[k].a = -1; b[k].b = -1; b[k].oper = '!'; b[k].v = 0;
}
else if (op == 3)
{
t1 = a[i];
t2 = a[j];
a[i] = t1 * t2;
a[j] = -1;
b[k].a = t1; b[k].b = t2; b[k].oper = '*'; b[k].v = t1 * t2; k++;
dfs(len - 1);
a[i] = t1;
a[j] = t2;
k--; b[k].a = -1; b[k].b = -1; b[k].oper = '!'; b[k].v = 0;
}
else if (a[i] % a[j] == 0 && a[j] !=0)
{
t1 = a[i];
t2 = a[j];
a[i] = t1 / t2;
a[j] = -1;
b[k].a = t1; b[k].b = t2; b[k].oper = '/'; b[k].v = t1 / t2; k++;
dfs(len - 1);
a[i] = t1;
a[j] = t2;
k--; b[k].a = -1; b[k].b = -1; b[k].oper = '!'; b[k].v = 0;
}
}
}
}
}
}
int main()
{
cin >> a[1] >> a[2] >> a[3] >> a[4];
dfs(4);
if (!flag)
cout << "No Answer!" << endl;
return 0;
}