50分求调(总是输出no answer)
查看原帖
50分求调(总是输出no answer)
1126005
00000000007f楼主2024/7/9 16:51
#include<bits/stdc++.h>
using namespace std;
int a[4],p;
string ts(int x){
	string ans;
	while(x){
		ans+=char(x%10+'0');
		x/=10;
	}
	reverse(ans.begin(),ans.end());
	return ans;
}  
void f(int ans,int a1,int b,int c,int d,string s){
	if(a1==1&&b==1&&c==1&&d==1){
		if(ans==24&&p==0){
			int flag=0;
			for(int i=1;i<s.size();i++){
				if(s[i-1]=='\n'&&flag==0)flag=1;
				if(flag)cout<<s[i];
			}
			p=1;
		}
		return;
	} 
	if(s.empty()){
		f(a[0],1,0,0,0,ts(a[0]));
		f(a[1],0,1,0,0,ts(a[1]));
		f(a[2],0,0,1,0,ts(a[2]));
		f(a[3],0,0,0,1,ts(a[3]));
	}
	if(!a1){
		f(ans+a[0],1,b,c,d,s+'\n'+ts(a[0])+'+'+ts(ans)+'='+ts(a[0]+ans));
		if(ans-a[0]<0)
			f(a[0]-ans,1,b,c,d,s+'\n'+ts(a[0])+'-'+ts(ans)+'='+ts(a[0]-ans));
		f(ans*a[0],1,b,c,d,s+'\n'+ts(a[0])+'*'+ts(ans)+'='+ts(a[0]*ans));
		if(ans!=0&&1.0*a[0]/ans==a[0]/ans)
			f(a[0]/ans,1,b,c,d,s+'\n'+ts(a[0])+'/'+ts(ans)+'='+ts(a[0]/ans));
	}
	if(!b){
		f(ans+a[1],a1,1,c,d,s+'\n'+ts(a[1])+'+'+ts(ans)+'='+ts(a[1]+ans));
		if(ans-a[1]<0)
			f(a[1]-ans,a1,1,c,d,s+'\n'+ts(a[1])+'-'+ts(ans)+'='+ts(a[1]-ans));
		f(ans*a[1],a1,1,c,d,s+'\n'+ts(a[1])+'*'+ts(ans)+'='+ts(a[1]*ans));
		if(ans!=0&&1.0*a[1]/ans==a[1]/ans)
			f(a[1]/ans,a1,1,c,d,s+'\n'+ts(a[1])+'/'+ts(ans)+'='+ts(a[1]/ans));
	}
	if(!c){
		f(ans+a[2],a1,b,1,d,s+'\n'+ts(a[2])+'+'+ts(ans)+'='+ts(a[2]+ans));
		if(ans-a[2]<0)
			f(a[2]-ans,a1,b,1,d,s+'\n'+ts(a[2])+'-'+ts(ans)+'='+ts(a[2]-ans));
		f(ans*a[2],a1,b,1,d,s+'\n'+ts(a[2])+'*'+ts(ans)+'='+ts(a[2]*ans));
		if(ans!=0&&1.0*a[2]/ans==a[2]/ans)
			f(a[2]/ans,a1,b,1,d,s+'\n'+ts(a[2])+'/'+ts(ans)+'='+ts(a[2]/ans));
	}
	if(!d){
		f(ans+a[3],a1,b,c,1,s+'\n'+ts(a[3])+'+'+ts(ans)+'='+ts(a[3]+ans));
		if(ans-a[3]<0)
			f(a[3]-ans,a1,b,c,1,s+'\n'+ts(a[3])+'-'+ts(ans)+'='+ts(a[3]-ans));
		f(ans*a[3],a1,b,c,1,s+'\n'+ts(a[3])+'*'+ts(ans)+'='+ts(a[3]*ans));
		if(ans!=0&&1.0*a[3]/ans==a[3]/ans)
			f(a[3]/ans,a1,b,c,1,s+'\n'+ts(a[3])+'/'+ts(ans)+'='+ts(a[3]/ans));
	}	
}
int main(){
	for(int i=0;i<4;i++)cin>>a[i];
	f(0,0,0,0,0,"");
	if(!p)cout<<"No answer!";
	return 0;
}
2024/7/9 16:51
加载中...