比赛 20100914 评测结果 AAWWWWAAWW
题目名称 算24点 最终得分 40
用户昵称 郭乾乐 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-09-14 20:45:18
显示代码纯文本
#include<iostream>
#include<fstream>
using namespace std;

ifstream fin("point24.in");
ofstream fout("point24.out");

int a[4];
char fu[6]={'0','+','-','*','/','='};
bool pan=true;

int yunsuan(int a,int b,int i)
{
	if(i==1) return(a+b);
	if(i==2) 
	{
		if((a-b)<=0) return(-10);
		else return (a-b);
	}
	if(i==3) return(a*b);
	if(i==4) return(a/b);
	{
		if(a/b*b!=a) return(-10);
		else return (a/b);
	}
	return 0;
}

void dfs(bool t[],int sum,int i,int jii[4][6])
{
	int j,k,w[5],da,xiao,ji[4][6];
	for(j=0;j<=3;j++)
		for(k=0;k<=5;k++)
			ji[j][k]=jii[j][k];
	if(i<4&&sum<24&&pan)
		for(j=0;j<4;j++)
			if(t[j])
				for(k=1;k<=4;k++)
				{
					w[k]=yunsuan(sum,a[j],k);
					if(w[k]<=0) return;
					t[j]=false;
					if(sum>a[j]) 
					{
						da=sum;
						xiao=a[j];
					}
					else
					{
						da=a[j];
						xiao=sum;
					}
					ji[i][1]=da;
					ji[i][2]=k*(-1);
					ji[i][3]=xiao;
					ji[i][4]=-5;
					ji[i][5]=w[k];
					dfs(t,w[k],i+1,ji);
					t[j]=true;
				}
	if(sum==24&&i==4&&pan)
		{
			pan=false;
			int p,q;
			for(p=1;p<=3;p++)
			{
				for(q=1;q<=5;q++)
				{
					if(ji[p][q]<0)
					{
						ji[p][q]*=-1;
						fout<<fu[ji[p][q]];
					}
					else
						fout<<ji[p][q];
				}
				fout<<endl;
			}
			return;
		}
}

int main()
{
	int i,j,ji[4][6];
	for(i=0;i<=3;i++)
		for(j=0;j<=5;j++)
			ji[i][j]=0;
	bool t[4]={true,true,true,true};
	for(i=0;i<4;i++)
		fin>>a[i];
	for(i=0;i<4;i++)
	{
		t[i]=false;
		dfs(t,a[i],1,ji);
		t[i]=true;
	}
	if(pan) fout<<"No answer!"<<endl;
	return 0;
}