70分
  • 板块P1236 算24点
  • 楼主littleFond
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/23 20:55
  • 上次更新2024/10/23 21:53:41
查看原帖
70分
1080250
littleFond楼主2024/10/23 20:55
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
int a[4];
bool flag;
char ans[3];
void dfs(int u,int last){
	if(u==4){
		if(last==24){
			flag=true;
		}return ;
	}if(flag||last==0||last==24)return ;
	ans[u-1]='+';
	dfs(u+1,last+a[u]);
	if(flag)return ;
	ans[u-1]='-';
	dfs(u+1,last-a[u]);
	if(flag)return ;
	ans[u-1]='*';
	dfs(u+1,last*a[u]);
	if(flag)return ;
	ans[u-1]='/';
	dfs(u+1,last/a[u]);
	if(flag)return ;
}
void print(){
	int last=a[0];
	if(ans[0]=='+')last+=a[1];
	if(ans[0]=='-')last-=a[1];
	if(ans[0]=='*')last*=a[1];
	if(ans[0]=='/')last/=a[1];
	if(ans[0]=='+'||ans[0]=='*')cout<<max(a[0],a[1])<<ans[0]<<min(a[0],a[1])<<'='<<last<<"\n";
	else cout<<a[0]<<ans[0]<<a[1]<<'='<<last<<"\n";
	a[1]=last;
	if(ans[1]=='+')last+=a[2];
	if(ans[1]=='*')last*=a[2];
	if(ans[1]=='/')last/=a[2];
	if(ans[1]=='-')last-=a[2];
	if(ans[1]=='+'||ans[1]=='*')cout<<max(a[1],a[2])<<ans[1]<<min(a[1],a[2])<<'='<<last<<"\n";
	else cout<<a[1]<<ans[2]<<a[2]<<'='<<last<<"\n";
	a[2]=last;
	if(ans[2]=='+')last+=a[3];
	if(ans[2]=='-')last-=a[3];
	if(ans[2]=='*')last*=a[3];
	if(ans[2]=='/')last/=a[3];
	if(ans[2]=='+'||ans[2]=='*')cout<<max(a[2],a[3])<<ans[2]<<min(a[2],a[3])<<'='<<last<<"\n";
	else cout<<a[2]<<ans[2]<<a[3]<<'='<<last<<"\n";
}
signed main(){
	for(int i=0;i<4;i++){
		cin>>a[i];
	}sort(a,a+4);
	do{
		dfs(1,a[0]);
		if(flag){
			print();
			return 0;
		}
	}while(next_permutation(a,a+4));
	cout<<"No answer!";
	return 0;
}
2024/10/23 20:55
加载中...