总觉得这个special judge有毒
  • 板块P1236 算24点
  • 楼主donkeys
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/8/24 15:22
  • 上次更新2023/11/6 19:30:46
查看原帖
总觉得这个special judge有毒
237893
donkeys楼主2020/8/24 15:22

先上代码

#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

这是样例一的输出,哎,算我错不手动滑稽

2020/8/24 15:22
加载中...