为什么它提示顺序错误……Special Judge呢!50分求助~
  • 板块P1236 算24点
  • 楼主whileAK
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/12/22 10:10
  • 上次更新2023/10/24 06:58:37
查看原帖
为什么它提示顺序错误……Special Judge呢!50分求助~
817925
whileAK楼主2022/12/22 10:10
#include<bits/stdc++.h>
using namespace std;
int a[10],b[10]={0,1,2,3,4},c[10],d[10]={1};
bool f[10]={},g[10]={},l=false;
bool solve(){
	int s=0;
	for(int i=0;i<=3;i++){
		if(d[i]==1)s+=a[c[i+1]];
		if(d[i]==2)s-=a[c[i+1]];
		if(d[i]==3)s*=a[c[i+1]];
		if(d[i]==4){
			if(s%a[c[i+1]]!=0){
				s=0;break;
			}
			s/=a[c[i+1]];
		}
		//cout<<a[c[i+1]]<<" ";
		//cout<<d[i]<<" ";
	}
	//cout<<"K"<<endl;
	if(s==24){
		s=a[c[1]];
		for(int i=1;i<=3;i++){
			cout<<s;
			if(d[i]==1)s+=a[c[i+1]];
			if(d[i]==2)s-=a[c[i+1]];
			if(d[i]==3)s*=a[c[i+1]];
			if(d[i]==4)s/=a[c[i+1]];
			if(d[i]==1)cout<<"+";
			if(d[i]==2)cout<<"-";
			if(d[i]==3)cout<<"*";
			if(d[i]==4)cout<<"/";
			cout<<a[c[i+1]]<<"="<<s<<endl;
		}l=true;
		return true;
	}
	int x=0,y=0;
	if(d[1]==1)x=a[c[1]]+a[c[2]];
	if(d[1]==2)x=a[c[1]]-a[c[2]];
	if(d[1]==3)x=a[c[1]]*a[c[2]];
	if(d[1]==4){
		if(a[c[1]]%a[c[2]]!=0)return false;
		x=a[c[1]]/a[c[2]];
	}
	if(d[3]==1)y=a[c[3]]+a[c[4]];
	if(d[3]==2)y=a[c[3]]-a[c[4]];
	if(d[3]==3)y=a[c[3]]*a[c[4]];
	if(d[3]==4){
		if(a[c[3]]%a[c[4]]!=0)return false;
		y=a[c[3]]/a[c[4]];
	}
	if(d[2]==1)s=x+y;
	if(d[2]==2)s=x-y;
	if(d[2]==3)s=x*y;
	if(d[2]==4){
		if(y==0||x%y!=0)return false;
		s=x/y;
	}
	if(s==24){
		cout<<a[c[1]];
		if(d[1]==1)cout<<"+";
		if(d[1]==2)cout<<"-";
		if(d[1]==3)cout<<"*";
		if(d[1]==4)cout<<"/";
		cout<<a[c[2]]<<"="<<x<<endl;
		cout<<a[c[3]];
		if(d[3]==1)cout<<"+";
		if(d[3]==2)cout<<"-";
		if(d[3]==3)cout<<"*";
		if(d[3]==4)cout<<"/";
		cout<<a[c[4]]<<"="<<y<<endl;
		cout<<x;
		if(d[2]==1)cout<<"+";
		if(d[2]==2)cout<<"-";
		if(d[2]==3)cout<<"*";
		if(d[2]==4)cout<<"/";
		cout<<y<<"="<<s<<endl;
		l=true;return true;
	}
	return false;
}
bool dfss(int k){
	if(l)return true;
	if(k==4){
		if(solve())return true;
	}
	else{
		for(int i=1;i<=4;i++){
			d[k]=i;
			dfss(k+1);
		}
	}
}
void dfs(int k){
	if(l)return;
	if(k==5){
		if(dfss(1))return;
	}
	else{
		for(int i=1;i<=4;i++){
			if(!f[i]){
				c[k]=i;
				f[i]=true;
				dfs(k+1);
				f[i]=false;
			}
		}
	}
	return;
}
int main(){
	scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4]);
	dfs(1);
	if(l){
		return 0;
	}
	else cout<<"No answer!";
	return 0;
}```
2022/12/22 10:10
加载中...