POJ 3983 快算24 G++

#include <iostream>
#include <algorithm>
#include <cmath>
#include <stack>
using namespace std;
//hiho 1304 搜索一·24点         百练2787 算24        需复习 
double da[4];
stack<int> wz;//位置 
stack<char> fh;//符号 
int dfs(int n)
{
	if(n==1)
	{
		if(fabs(da[0]-24)<0.00001)
		{ 
			return true;
		}else
		{
			return false;
		}
	}
	double td[4];
	for(int i=0;i<4;i++)
	{
		td[i]=da[i];
	} 
	for(int i=0;i<(n-1);i++)
	{
		int j=i+1;
		{
			double a=da[i];//抄博友 
			double b=da[j];
			for(int k=j;k<(n-1);k++)
			{
				da[k]=da[k+1];
			}
			//da[j]=da[n-1];//最边上没运算的数字 
			
			da[i]=a+b;
			if(dfs(n-1))//抄博友程序 
			{ 
				wz.push(i);
				fh.push('+');
				return true;
			}
			
			da[i]=a-b;
			if(dfs(n-1))
			{
				wz.push(i);
				fh.push('-');				
				return true;
			}
			
			da[i]=a*b;
			if(dfs(n-1))
			{
				wz.push(i);
				fh.push('*');
				return true;
			}
			
			if(b!=0)
			{
				da[i]=a/b;
				if(dfs(n-1))
				{
					wz.push(i);
					fh.push('/');					
					return true;
				}
			}
			for(int i=0;i<4;i++)
			{
				da[i]=td[i];
			} 
		}
	}
	return false;//抄博友 
}
int main()
{
	//while(1)
	{
		for(int i=0;i<4;i++)
		{
			cin>>da[i];
			//cout<<da[i]<<" ";
		}
		//cout<<endl;
		string s[4];
		for(int i=0;i<4;i++)
		{
			s[i]=" ";
			s[i][0]=(char)((int)(da[i])+'0');
			//cout<<s[i]<<" ";
		}
		//cout<<endl;
		/*		
		if(da[0]==0 && da[1]==0 && da[2]==0 && da[3]==0)
		{
			break;
		}*/
		/*
		if(dfs(4))
		{
			cout<<"YES"<<endl;
		}else
		{
			cout<<"NO"<<endl;
		}*/
		dfs(4);
		string jg;
		while(wz.empty()!=1)
		{
			int ti=wz.top();
			string ts=" ";
			ts[0]=fh.top();
			//cout<<ti<<" "<<ts<<endl;
			string l="(";
			string r=")";
			if(wz.size()==1)
			{
				s[ti]=s[ti]+ts+s[ti+1];
			}else
			{
				s[ti]=l+s[ti]+ts+s[ti+1]+r;
			}		
			jg=s[ti];
			wz.pop();
			fh.pop(); 
		}
		cout<<jg<<endl;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值