比赛 20100914 评测结果 AAAWAWAAWA
题目名称 算24点 最终得分 70
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-09-14 20:29:26
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

const char way[4]={'+','-','*','/'};

int a[4][4];
int me[4],me2[4];

void out()
{
	int t1,t2;
	t1=max(a[0][me2[0]],a[0][me2[0]+1]),t2=min(a[0][me2[0]],a[0][me2[0]+1]);
	printf("%d%c%d=%d\n",t1,way[me[0]],t2,a[1][me2[0]]);
	t1=max(a[1][me2[1]],a[1][me2[1]+1]),t2=min(a[1][me2[1]],a[1][me2[1]+1]);
	printf("%d%c%d=%d\n",t1,way[me[1]],t2,a[2][me2[1]]);
	t1=max(a[2][me2[2]],a[2][me2[2]+1]),t2=min(a[2][me2[2]],a[2][me2[2]+1]);
	printf("%d%c%d=%d\n",t1,way[me[2]],t2,a[3][me2[2]]);
	exit(0);
}

void search(int dep)
{
	for(int i=0;i<=3-dep;i++)
		if (!a[dep][i])
			return ;
	if (dep==3)
	{
		if (a[dep][0]==24)
			out();
		return ;
	}
	for(int i=0;i<3-dep;i++)
	{
		me2[dep]=i;
		for(int j=0;j<i;j++)
			a[dep+1][j]=a[dep][j];
		for(int j=i+1;j<=i+2-dep;j++)
			a[dep+1][j]=a[dep][j+1];
		a[dep+1][i]=a[dep][i]+a[dep][i+1];me[dep]=0;
		search(dep+1);
		if (a[dep][i]-a[dep][i+1]>0)
		{
			a[dep+1][i]=a[dep][i]-a[dep][i+1];me[dep]=1;
			search(dep+1);
		}
		a[dep+1][i]=a[dep][i]*a[dep][i+1];me[dep]=2;
		search(dep+1);
		if (a[dep][i+1]&&a[dep][i]%a[dep][i+1]==0)
		{
			a[dep+1][i]=a[dep][i]/a[dep][i+1];me[dep]=3;
			search(dep+1);
		}
	}
}

int main()
{
	freopen("point24.in","r",stdin);
	freopen("point24.out","w",stdout);
	scanf("%d%d%d%d",a[0],a[0]+1,a[0]+2,a[0]+3);
	search(0);
	printf("No answer!\n");
	return 0;
}