【开源】24点

发布时间 2023-11-30 16:27:20作者: daiyulong
#include <iostream>
using namespace std;
bool flag; 
int a[5][4];
int cal(int a,int b,int k){
	if(k==0) return a+b;
	else if(k==1) return a*b;
	else if(k==2) return a-b;
	else if(k==3&&(b==0||a%b!=0)) return -10007; 
	else return a/b;
}
void update(int num,int i,int j,int x){
	a[num][0] = x;
	int ii = 1,jj = 0;
	while(ii<num){
		while(jj==i||jj==j) jj++;
		a[num][ii++] = a[num+1][jj];
	}
//	for(int m=0;m<num;m++) cout<<a[num][m]<<" ";
//	cout<<endl;
}
void solve_dfs(int num){
	if(flag) return;
	if(num==1){
		if(a[1][0]==24) flag = true;
		return ;
	}
	else for(int i=0;i<num;i++){
		for(int j=0;j<num;j++){
			if(i==j) continue;
			for(int k=0;k<4;k++){
				int tmp = cal(a[num][i],a[num][j],k);
				if(tmp==-10007||flag) continue;
				update(num-1,i,j,tmp);
				solve_dfs(num-1);
			}
		}
	}
}
int main()
{
	for(int i=0;i<4;i++) cin>>a[4][i];
	solve_dfs(4);
	if(flag) cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
	return 0;
}