萌新求助 样例未过
查看原帖
萌新求助 样例未过
561529
Infinite_Energy楼主2023/1/7 15:09

这段代码还会胡言乱语,可以测一下

#include<bits/stdc++.h>
using namespace std;
long long a,b,c,d,p[10],q[10],op[10],ans[10][10],x,y;
bool flag;
void print(long long now){
	if(now>3){
		return;
	}
	cout<<ans[now][1];
	if(op[now]==1){
		cout<<"+";
	}
	if(op[now]==2){
		cout<<"-";
	}
	if(op[now]==3){
		cout<<"*";
	}
	if(op[now]==4){
		cout<<"/";
	}
	cout<<ans[now][2];
	cout<<"=";
	if(op[now]==1){
		cout<<ans[now][1]+ans[now][2];
	}
	if(op[now]==2){
		cout<<ans[now][1]-ans[now][2];
	}
	if(op[now]==3){
		cout<<ans[now][1]*ans[now][2];
	}
	if(op[now]==4){
		cout<<ans[now][1]/ans[now][2];
	}
	cout<<endl;
	print(now+1);
}
void dfs(long long now){
	if(flag==1){
		return;
	}
	if(now==4){
		long long cnt=0,tmp=0;
		for(int i=1;i<=4;i++){
			if(p[i]!=-1){
				cnt++;
				tmp=p[i];
			}
		}
		if(cnt==1&&tmp==24){
			print(1);
			flag=1;
		}
		return;
	}
	for(int i=1;i<=4;i++){
		for(int j=1;j<=4;j++){
			if(i==j||p[i]==-1||p[j]==-1){
				continue;
			}
			op[now]=1;
			ans[now][1]=max(p[i],p[j]);
			ans[now][2]=min(p[i],p[j]);
			x=p[i];
			y=p[j];
			p[i]=x+y;
			p[j]=-1;
			dfs(now+1);
			p[i]=x;
			p[j]=y;
			if(p[i]>p[j]){
				op[now]=2;
				ans[now][1]=p[i];
				ans[now][2]=p[j];
				x=p[i];
				y=p[j];
				p[i]=x-y;
				p[j]=-1;
				dfs(now+1);
				p[i]=x;
				p[j]=y;
			}
			if(p[j]>p[i]){
				op[now]=2;
				ans[now][1]=p[j];
				ans[now][2]=p[i];
				x=p[i];
				y=p[j];
				p[i]=y-x;
				p[j]=-1;
				dfs(now+1);
				p[i]=x;
				p[j]=y;
			}
			op[now]=3;
			ans[now][1]=max(p[i],p[j]);
			ans[now][2]=min(p[i],p[j]);
			x=p[i];
			y=p[j];
			p[i]=x*y;
			p[j]=-1;
			dfs(now+1);
			p[i]=x;
			p[j]=y;
			if(p[j]!=0&&p[i]%p[j]==0){
				op[now]=4;
				ans[now][1]=p[i];
				ans[now][2]=p[j];
				x=p[i];
				y=p[j];
				p[i]=x/y;
				p[j]=-1;
				dfs(now+1);
				p[i]=x;
				p[j]=y;
			}
			if(p[i]!=0&&p[j]%p[i]==0){
				op[now]=4;
				ans[now][1]=p[j];
				ans[now][2]=p[i];
				x=p[i];
				y=p[j];
				p[i]=y/x;
				p[j]=-1;
				dfs(now+1);
				p[i]=x;
				p[j]=y;
			}
		}
	}
}
long long read(){
	char ch=getchar();
	long long sgn=1,x=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			sgn=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar();
	}
	return x*sgn;
}
void write(long long n,bool p){
	if(n<0){
		putchar('-');
		n=-n;
	}
	if(n==0){
		if(p==true){
			putchar('0');
		}
		return;
	}
	write(n/10,0);
	putchar(n%10+'0');
}
int main(){
	cin>>a>>b>>c>>d;
	p[1]=a;
	p[2]=b;
	p[3]=c;
	p[4]=d;
	sort(p+1,p+4+1);
	dfs(1);
	if(flag==0){
		cout<<"No answer!"<<endl;
		return 0;
	}
	return 0;
}


2023/1/7 15:09
加载中...