比赛 NOIP_4 评测结果 AAAWAWAAAA
题目名称 算24点 最终得分 80
用户昵称 zqzas 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-09-19 21:42:57
显示代码纯文本
#include <stdio.h>

#define maxn 10

const int n=4;
const char s[4]={'+','-','*','/'};

int flag,data[maxn],num[maxn],fuhao[maxn],he[maxn],hash[maxn];
FILE *f1,*f2;

void search(int x,int now)
{
	int i,j,zan;
	if (now>=n-1)
	{
		if (x==24)
		{
			flag=1;
			if (num[0]>num[1] || fuhao[0]==3 || fuhao[0]==1)
				fprintf(f2,"%d%c%d=%d\n",num[0],s[fuhao[0]],num[1],he[0]);
			else
				fprintf(f2,"%d%c%d=%d\n",num[1],s[fuhao[0]],num[0],he[0]);
			
			if (he[0]>num[2] || fuhao[1]==3 || fuhao[1]==1)
				fprintf(f2,"%d%c%d=%d\n",he[0],s[fuhao[1]],num[2],he[1]);
			else
				fprintf(f2,"%d%c%d=%d\n",num[2],s[fuhao[1]],he[0],he[1]);
			
			if (he[1]>num[3] || fuhao[2]==3 || fuhao[2]==1)
				fprintf(f2,"%d%c%d=%d",he[1],s[fuhao[2]],num[3],he[2]);
			else
				fprintf(f2,"%d%c%d=%d",num[3],s[fuhao[2]],he[1],he[2]);
		}
		return;
	}
	for (i=0;i<n;i++)
	{
		if (hash[i]==0)
			for (j=0;j<4;j++)
			{
				if (j!=3 || x%data[i]==0)
				{
					if (j==0)
						zan=x+data[i];
					if (j==1)
						zan=x-data[i];
					if (j==2)
						zan=x*data[i];
					if (j==3)
						zan=x/data[i];
					hash[i]=1;
					he[now]=zan;
					fuhao[now]=j;
					num[now+1]=data[i];
					search(zan,now+1);
					hash[i]=0;
					if (flag)
						return;
				}
			}
	}
}

void run(void)
{
	int i;
	for (i=0;i<n;i++)
	{
		num[0]=data[i];
		hash[i]=1;
		search(data[i],0);
		hash[i]=0;
		if (flag)
			break;
	}
}

void ini(void)
{
	int i;
	for (i=0;i<n;i++)
		fscanf(f1,"%d",&data[i]);
}

int main(void)
{
	f1=fopen("point24.in","r");
	f2=fopen("point24.out","w");
	ini();
	run();
	if (flag==0)
		fprintf(f2,"No answer!");
	fclose(f1);fclose(f2);
	return 0;
}