样例无输出求调谢谢
  • 板块P1236 算24点
  • 楼主bcbgszyzh
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/19 16:15
  • 上次更新2024/3/19 19:25:24
查看原帖
样例无输出求调谢谢
726902
bcbgszyzh楼主2024/3/19 16:15
#include<iostream>
using namespace std;
int a[5];
bool vis[5];
int ans[4][3];
bool flag=0;
bool check(){
	int n1=0,n2=0;
	for(int i=0;i<4;++i){
		if(a[i]==24)++n1;
		if(a[i]==-1)++n2;
	}
	if(!(n1==1&&n2==3))return 0;
	return 1;
}
char p0[]="+-*/";
void dfs(int step){
	if(step==3){
		if(check()){
			flag=true;
			for(int i=0;i<step;i++){
				printf("%d",ans[i][0]);
				printf("%c",p0[ans[i][1]]);
				printf("%d",ans[i][2]);
				if(ans[i][1]==0){
					printf("=%d\n",ans[i][0]+ans[i][2]);
				}
				if(ans[i][1]==1){
					printf("=%d\n",ans[i][0]-ans[i][2]);
				}
				if(ans[i][1]==2){
					printf("=%d\n",ans[i][0]*ans[i][2]);
				}
				if(ans[i][1]==3){
					printf("=%d\n",ans[i][0]/ans[i][2]);
				}
			}
		}
	}
	int x,y;
	for(int i=0;i<4;++i){
		for(int j=0;j<4;++j)if(i!=j&&!a[i]==-1&&!a[j]==-1){
			//+
			x=a[i],y=a[j];
			ans[step][0]=a[i];
			ans[step][1]=0;
			ans[step][2]=a[j];
			a[i]+=a[j];
			a[j]=-1;
			dfs(step+1);
			a[i]=x;
			a[j]=y;
			
			//-
			x=a[i],y=a[j];
			ans[step][0]=a[i];
			ans[step][1]=1;
			ans[step][2]=a[j];
			a[i]-=a[j];
			a[j]=-1;
			dfs(step+1);
			a[i]=x;
			a[j]=y;
			
			//×
			
			x=a[i],y=a[j];
			ans[step][0]=a[i];
			ans[step][1]=2;
			ans[step][2]=a[j];
			a[i]*=a[j];
			a[j]=-1;
			dfs(step+1);
			a[i]=x;
			a[j]=y;
			
			//÷
			
			x=a[i],y=a[j];
			if(a[j]!=0&&a[i]%a[j]==0){
				ans[step][0]=a[i];
				ans[step][1]=3;
				ans[step][2]=a[j];
				a[i]/=a[j];
				a[j]=-1;
				dfs(step+1);
				a[i]=x;
				a[j]=y;
			} 
		}
	}
}
int main(){
	for(int i=0;i<4;++i)scanf("%d",&a[i])
	dfs(0);
	return 0;
}
2024/3/19 16:15
加载中...