求助,诡异代码调不出来了
查看原帖
求助,诡异代码调不出来了
285414
Swiftie_wyc22楼主2022/2/15 21:04

我觉得就是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;
}
2022/2/15 21:04
加载中...