90分help!!!!!!
查看原帖
90分help!!!!!!
115067
Adis_FireDevil楼主2020/11/14 11:09

WA第七个点,给个第七个点的数据都好(今天的下载次数用完了...)

#include<bits/stdc++.h>
using namespace std;
int a[5],b[5],c[5];
char q[7];
bool w;
int f() {		//手动模拟各种形如(a?b)?(c?d)的情况 
	int q,e;
	if(b[1]*b[2]+b[3]*b[4]==24&&!w) {
		w=1;
		q=b[1]*b[2];
		e=b[3]*b[4];
		cout<<max(b[1],b[2])<<"*"<<min(b[1],b[2])<<"="<<q<<endl;
		cout<<max(b[3],b[4])<<"*"<<min(b[3],b[4])<<"="<<e<<endl;
		cout<<max(q,e)<<"+"<<min(q,e)<<"=24";
	}
	if(b[1]*b[2]-b[3]*b[4]==24&&!w) {
		w=1;
		q=b[1]*b[2];
		e=b[3]*b[4];
		if(q>w) {
			cout<<max(b[1],b[2])<<"*"<<min(b[1],b[2])<<"="<<q<<endl;
			cout<<max(b[3],b[4])<<"*"<<min(b[3],b[4])<<"="<<e<<endl;
			cout<<max(q,e)<<"-"<<min(q,e)<<"=24";
		}
	}
	if(b[1]/b[2]-b[3]/b[4]==24&&b[1]%b[2]==0&&b[3]%b[4]==0&&!w) {
		w=1;
		q=b[1]/b[2];
		e=b[3]/b[4];
		if(q>w) {
			cout<<max(b[1],b[2])<<"/"<<min(b[1],b[2])<<"="<<q<<endl;
			cout<<max(b[3],b[4])<<"/"<<min(b[3],b[4])<<"="<<e<<endl;
			cout<<max(q,e)<<"-"<<min(q,e)<<"=24";
		}
	}
	if(b[1]/b[2]+b[3]/b[4]==24&&b[1]%b[2]==0&&b[3]%b[4]==0&&!w) {
		w=1;
		q=b[1]/b[2];
		e=b[3]/b[4];
		cout<<max(b[1],b[2])<<"/"<<min(b[1],b[2])<<"="<<q<<endl;
		cout<<max(b[3],b[4])<<"/"<<min(b[3],b[4])<<"="<<e<<endl;
		cout<<max(q,e)<<"+"<<min(q,e)<<"=24";
	}
	if((b[1]-b[2])*(b[3]-b[4])==24&&b[1]>b[2]&&b[3]>b[4]&&!w) {
		w=1;
		q=b[1]-b[2];
		e=b[3]-b[4];
		cout<<max(b[1],b[2])<<"-"<<min(b[1],b[2])<<"="<<q<<endl;
		cout<<max(b[3],b[4])<<"-"<<min(b[3],b[4])<<"="<<e<<endl;
		cout<<max(q,e)<<"*"<<min(q,e)<<"=24";
	}
	if((b[1]+b[2])*(b[3]+b[4])==24&&!w) {
		w=1;
		q=b[1]+b[2];
		e=b[3]+b[4];
		cout<<max(b[1],b[2])<<"+"<<min(b[1],b[2])<<"="<<q<<endl;
		cout<<max(b[3],b[4])<<"+"<<min(b[3],b[4])<<"="<<e<<endl;
		cout<<max(q,e)<<"*"<<min(q,e)<<"=24";
	}
	if((b[1]+b[2])*(b[3]-b[4])==24&&b[3]>b[4]&&!w) {
		w=1;
		q=b[1]+b[2];
		e=b[3]-b[4];
		cout<<max(b[1],b[2])<<"+"<<min(b[1],b[2])<<"="<<q<<endl;
		cout<<max(b[3],b[4])<<"-"<<min(b[3],b[4])<<"="<<e<<endl;
		cout<<max(q,e)<<"*"<<min(q,e)<<"=24";
	}
	if(b[3]!=b[4])if((b[1]-b[2])/(b[3]-b[4])==24&&b[1]>b[2]&&b[3]>b[4]&&(b[1]-b[2])%(b[3]-b[4])==0&&!w) {
			w=1;
			q=b[1]-b[2];
			e=b[3]-b[4];
			cout<<max(b[1],b[2])<<"-"<<min(b[1],b[2])<<"="<<q<<endl;
			cout<<max(b[3],b[4])<<"-"<<min(b[3],b[4])<<"="<<e<<endl;
			cout<<max(q,e)<<"/"<<min(q,e)<<"=24";
		}
	if((b[1]+b[2])/(b[3]+b[4])==24&&(b[1]+b[2])%(b[3]+b[4])==0&&!w) {
		w=1;
		q=b[1]+b[2];
		e=b[3]+b[4];
		cout<<max(b[1],b[2])<<"+"<<min(b[1],b[2])<<"="<<q<<endl;
		cout<<max(b[3],b[4])<<"+"<<min(b[3],b[4])<<"="<<e<<endl;
		cout<<max(q,e)<<"/"<<min(q,e)<<"=24";
	}
	if(b[3]-b[4]!=0)if((b[1]+b[2])/(b[3]-b[4])==24&&b[3]>b[4]&&(b[1]+b[2])%(b[3]+b[4])==0&&!w) {
			w=1;
			q=b[1]+b[2];
			e=b[3]-b[4];
			cout<<max(b[1],b[2])<<"+"<<min(b[1],b[2])<<"="<<q<<endl;
			cout<<max(b[3],b[4])<<"-"<<min(b[3],b[4])<<"="<<e<<endl;
			cout<<max(q,e)<<"/"<<min(q,e)<<"=24";
		}
}
int dfs(int n,int m) {			//dfs各种((a?b)?c)?d的情况 
	if(n==4&&m==24) {
		cout<<max(b[1],b[2])<<q[1]<<min(b[1],b[2])<<"="<<c[1]<<endl;
		cout<<max(c[1],b[3])<<q[2]<<min(c[1],b[3])<<"="<<c[2]<<endl;
		cout<<max(c[2],b[4])<<q[3]<<min(c[2],b[4])<<"=24";
		w=1;
		return 0;
	}
	if(n==4)return 0;
	if(m%b[n+1]==0) {
		c[n]=c[n-1]/b[n+1];
		q[n]='/';
		dfs(n+1,m/b[n+1]);
	}
	if(w)return 0;
	c[n]=c[n-1]*b[n+1];
	q[n]='*';
	dfs(n+1,m*b[n+1]);
	if(w)return 0;
	c[n]=c[n-1]+b[n+1];
	q[n]='+';
	dfs(n+1,m+b[n+1]);
	if(w)return 0;
	if(c[n-1]>b[n+1]) {
		c[n]=c[n-1]-b[n+1];
		q[n]='-';
		dfs(n+1,m-b[n+1]);
	}
	if(w)return 0;
	q[n]=0;
	c[n]=0;
}
int main() {
	cin>>a[1]>>a[2]>>a[3]>>a[4];
	for(int i=1; i<=4; i++) {
		b[1]=a[i];
		for(int j=1; j<=4; j++) {
			if(i==j)continue;
			b[2]=a[j];
			for(int k=1; k<=4; k++) {
				if(i==k||j==k)continue;
				b[3]=a[k];
				for(int l=1; l<=4; l++) {
					if(i==l||j==l||k==l)continue;
					b[4]=a[l];
					c[0]=b[1];
					dfs(1,b[1]);
					f();
					if(w)return 0;
				}
			}
		}
	}
	if(!w)cout<<"No answer!";
}

膜拜各位大佬

2020/11/14 11:09
加载中...