先上代码
#include<iostream>
#include<string>
using namespace std;
int a[4];
bool f[3];
string ans[3];
void get(int num[4], int n)
{
if (n == 1)
{
if (num[0] == 24)
f[0] = f[1] = f[2] = 1;
return;
}
for (int i = 1; i < n; i++)
{
int newnum[4];
for (int j = 0; j < i - 1; j++)
newnum[j] = num[j];
for (int j = i + 1; j < n; j++)
newnum[j - 1] = num[j];
//+
newnum[i - 1] = num[i - 1] + num[i];
get(newnum, n - 1);
if (f[n - 2])
ans[n - 2] = to_string(num[i - 1]) + "+" + to_string(num[i]) +
"=" + to_string(num[i - 1] + num[i]);
f[n - 2] = 0;
//-
if (num[i - 1] - num[i] > 0)
{
newnum[i - 1] = num[i - 1] - num[i];
get(newnum, n - 1);
if (f[n - 2])
ans[n - 2] = to_string(num[i - 1]) + "-" + to_string(num[i]) +
"=" + to_string(num[i - 1] - num[i]);
f[n - 2] = 0;
}
//*
newnum[i - 1] = num[i - 1] * num[i];
get(newnum, n - 1);
if (f[n - 2])
ans[n - 2] = to_string(num[i - 1]) + "*" + to_string(num[i]) +
"=" + to_string(num[i - 1] * num[i]);
f[n - 2] = 0;
///
if (num[i - 1] % num[i] == 0)
{
newnum[i - 1] = num[i - 1] / num[i];
get(newnum, n - 1);
if (f[n - 2])
ans[n - 2] = to_string(num[i - 1]) + "/" + to_string(num[i]) +
"=" + to_string(num[i - 1] / num[i]);
f[n - 2] = 0;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin >> a[0] >> a[1] >> a[2] >> a[3];
get(a, 4);
if (ans[0] != "")
{
for (int i = 2; i >= 0; i--)
{
cout << ans[i] << endl;
}
}
else
cout << "No answer!";
return 0;
}
然后就样例数据(也是第一个点)输出
3*7=21
2+21=23
1+23=24
理论上我也符合输出格式啊,就是不给过
再透个题:
2+1=3
7*3=21
21+3=24
这是样例一的输出,哎,算我错不手动滑稽