记录编号 19358 评测结果 AAAAAAAAAA
题目名称 算24点 最终得分 100
用户昵称 Gravatar郭乾乐 是否通过 通过
代码语言 C++ 运行时间 0.010 s
提交时间 2010-10-08 20:38:03 内存使用 0.26 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("point24.in");
ofstream fout("point24.out");
int num[4],data[4][4];
bool t[4]={true,true,true,true},pan=true;
char fu[4]={'+','-','*','/'};

int yun(int a,int b,int c)
{
	if(c==0) return (a+b);
	if(c==1) return (a-b);
	if(c==2) return (a*b);
	if(c==3)
	{
		if(a%b==0)
			return(a/b);
		else
		{
		    if(b%a==0)
			    return(b/a);
			else
			    return(-100000);
		}
	}
	return 0;
}
void dfs(int i,int ci,int sum)
{
	int r;
	if(!pan) return;
	if(ci==4)
	{
		if(sum==24)
		{
			for(r=1;r<=3;r++)
			{
			fout<<data[r][0];
			fout<<fu[data[r][1]];
			fout<<data[r][2];
			fout<<'=';
			fout<<data[r][3]<<endl;
			}
			pan=false;
		}
		return;
	}
	int j,k,big,small,temp;
	for(k=0;k<=3;k++)//j 符号
		for(j=0;j<=3;j++)//k 数字
			if(t[k]&&k!=i&&pan)
			{
				temp=yun(sum,num[k],j);
				if(temp<0&&temp!=-100000) temp=-1*temp;
				if(temp!=-100000&&temp!=0)
				{
				    big=sum; small=num[k];
					if(sum<num[k])
					{
						big=num[k];
						small=sum;
					}
					data[ci][0]=big;
					data[ci][1]=j;
					data[ci][2]=small;
					data[ci][3]=temp;
					t[k]=false;
					dfs(k,ci+1,temp);
					t[k]=true;
				}
			}
}
	
int main()
{
	int i;
	for(i=0;i<=3;i++) fin>>num[i];
	for(i=0;i<=3;i++)
	{
		t[i]=false;
		dfs(i,1,num[i]);
		t[i]=true;
	}
	if(pan) fout<<"No answer!"<<endl;
	return 0;
}