70pts求调
  • 板块P1236 算24点
  • 楼主wyxing
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/6/28 09:49
  • 上次更新2025/6/28 21:49:29
查看原帖
70pts求调
1573746
wyxing楼主2025/6/28 09:49

求问大佬括号运算怎么解决,我的代码好像只能按abcd的顺序计算

#include<bits/stdc++.h>
#define ll long long
#define dl double
using namespace std;
const int N=1e5+5;
const int inf=1e9;
int arr[5],flag;
bool fl[5];
vector<string> v;
void dfs(int ans) {
	if(flag==1)return;
	if(ans==24) {	//得到答案 
		flag=1;
		for(auto it:v)cout<<it<<'\n';
		return;
	}
	for(int i=1; i<=4; i++) {//枚举四个数 
		if(!fl[i]) {
			//大数在前
			int maxs=max(ans,arr[i]),mins=min(ans,arr[i]);

			//尝试加减乘除
			v.push_back(to_string(maxs)+"+"+to_string(mins)+"="+to_string(maxs+mins));
			fl[i]=1;
			dfs(maxs+mins);
			v.pop_back();
			fl[i]=0;
			//回溯
			
			v.push_back(to_string(maxs)+"-"+to_string(mins)+"="+to_string(maxs-mins));
			fl[i]=1;
			dfs(maxs-mins);
			v.pop_back();
			fl[i]=0;

			v.push_back(to_string(maxs)+"*"+to_string(mins)+"="+to_string(maxs*mins));
			fl[i]=1;
			dfs(maxs*mins);
			v.pop_back();
			fl[i]=0;
			
			//除法判断 
			if(maxs==0||mins==0)continue;
			if(maxs%mins==0) {
				v.push_back(to_string(maxs)+"/"+to_string(mins)+"="+to_string(maxs/mins));
				fl[i]=1;
				dfs(maxs/mins);
				v.pop_back();
				fl[i]=0;
			}
		}
	}
}
int main() {
	for(int i=1; i<=4; i++)cin>>arr[i];
	for(int i=1; i<=4; i++) {//枚举四个数开头 
		fl[i]=1;
		dfs(arr[i]);
		fl[i]=0;
	}
	if(!flag)cout<<"No answer!";
	return 0;
}
2025/6/28 09:49
加载中...