记录编号 84208 评测结果 AAAAAAAAAA
题目名称 算24点 最终得分 100
用户昵称 GravatarDijkstra 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2013-12-10 18:17:11 内存使用 0.28 MiB
显示代码纯文本
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("point24.in");
ofstream fout("point24.out");
int n[4]={0},ch[4]={0},S[4]={0},path[4]={0};
bool F[4]={0},flag=1;
void INPUT(){int i;for(i=0;i<4;i++)fin>>n[i];}
void OUTPUT()
{
	int i;
	for(i=0;i<3;i++)
	{
		if(ch[i+1]==5)
		{
			fout<<n[path[i+1]]<<"/"<<S[i]<<"="<<S[i+1]<<endl;
			continue;
		}
		if(ch[i+1]==6)
		{
			fout<<n[path[i+1]]<<"-"<<S[i]<<"="<<S[i+1]<<endl;
			continue;
		}
		if(ch[i+1]==1||ch[i+1]==3) fout<<max(S[i],n[path[i+1]]);
		else fout<<S[i];
		if(ch[i+1]==1) fout<<"+";
		if(ch[i+1]==2) fout<<"-";
		if(ch[i+1]==3) fout<<"*";
		if(ch[i+1]==4) fout<<"/";
		if(ch[i+1]==1||ch[i+1]==3) fout<<min(S[i],n[path[i+1]]);
		else fout<<n[path[i+1]];
		fout<<"="<<S[i+1]<<endl;
	}
}
void PLUS(int pos,int i)
{
	void SEARCH(int pos);
	S[pos]=S[pos-1]+n[i];F[i]=1;path[pos]=i;ch[pos]=1;
	SEARCH(pos+1);
	S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
void MIN(int pos,int i)
{
	void SEARCH(int pos);
	if(S[pos-1]-n[i]>0)
	{   
		S[pos]=S[pos-1]-n[i];F[i]=1;path[pos]=i;ch[pos]=2;
		SEARCH(pos+1);
		S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
	}
}
void MINED(int pos,int i)
{
	void SEARCH(int pos);
	if(S[pos-1]-n[i]<0)
	{   
		S[pos]=n[i]-S[pos-1];F[i]=1;path[pos]=i;ch[pos]=6;
		SEARCH(pos+1);
		S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
	}
}
void TIME(int pos,int i)
{
	void SEARCH(int pos);
	S[pos]=S[pos-1]*n[i];F[i]=1;path[pos]=i;ch[pos]=3;
	SEARCH(pos+1);
	S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
void DIV(int pos,int i)
{
	void SEARCH(int pos);
	if(S[pos-1]%n[i]==0)
	{
	    S[pos]=S[pos-1]/n[i];F[i]=1;path[pos]=i;ch[pos]=4;
	    SEARCH(pos+1);
	    S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
	}
}
void DIVED(int pos,int i)
{
	void SEARCH(int pos);
	if(n[i]%S[pos-1]==0)
	{
	    S[pos]=n[i]/S[pos-1];F[i]=1;path[pos]=i;ch[pos]=5;
	    SEARCH(pos+1);
	    S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
	}
}
void SEARCH(int pos)
{
	if(pos==4)
	{
		if(flag&&S[pos-1]==24)
		{
			OUTPUT();
			flag=0;
		}
		return;
	}
	int i;
	for(i=0;i<4;i++)
	{
		if(!F[i])
		{
			PLUS(pos,i);
		    MIN(pos,i);
			MINED(pos,i);
		    TIME(pos,i);
		    DIV(pos,i);
			DIVED(pos,i);
		}
	}
}
int main()
{
	int i;
	INPUT();
	for(i=0;i<4;i++)
	{
		F[i]=1;path[0]=i;S[0]=n[i];
		SEARCH(1);
		F[i]=0;path[0]=0;S[0]=0;
	}
	if(flag) fout<<"No answer!"<<endl;
	return 0;
}