70pts 向大佬求助!
  • 板块P1236 算24点
  • 楼主hnxxwpf
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/23 09:30
  • 上次更新2024/2/23 11:52:50
查看原帖
70pts 向大佬求助!
700122
hnxxwpf楼主2024/2/23 09:30
#include<iostream>
using namespace std;
int a[5],num[12],vis[5],flag;
char res[5];
void dfs(int sum,int step){
	if(flag) return;
	if(step == 4){
		if(sum == 24){
			flag = 1;
			for(int i = 1;i <= 3;++i) printf("%d%c%d=%d\n",num[i],res[i],num[i+4],num[i+8]);
		}
		return;
	}
	for(int i = 0;i < 4;++i){
		if(!vis[i]){
			vis[i] = 1;
			
			res[step] = '+';
			num[step] = sum;
			num[step+4] = a[i];
			num[step+8] = sum+a[i];
			dfs(sum+a[i],step+1);
			
			res[step] = '-';
			if(sum > a[i]){
				num[step] = sum;
				num[step+4] = a[i];
				num[step+8] = sum-a[i];
				dfs(sum-a[i],step+1);
				
			}
			if(a[i] > sum){
				num[step] = a[i];
				num[step+4] = sum;
				num[step+8] = a[i]-sum;
				dfs(a[i]-sum,step+1);
			}
			
			res[step] = '*';
			num[step] = a[i];
			num[step+4] = sum;
			num[step+8] = a[i]*sum;
			dfs(a[i]*sum,step+1);
			
			res[step] = '/';
			if(sum > 0 && a[i] % sum == 0){
				num[step] = a[i];
				num[step+4] = sum;
				num[step+8] = a[i]/sum;
				dfs(a[i]/sum,step+1);
			}
			if(a[i] > 0 && sum % a[i] == 0){
				num[step] = sum;
				num[step+4] = a[i];
				num[step+8] = sum/a[i];
				dfs(sum/a[i],step+1);
			}

			vis[i] = 0;
		}
	}
}
int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	vis[0] = 1;
	dfs(a[0],1);
	vis[0] = 0;
	if(flag) return 0;
	vis[1] = 1;
	dfs(a[1],1);
	vis[1] = 0;
	if(flag) return 0;
	vis[2] = 1;
	dfs(a[2],1);
	vis[2] = 0;
	if(flag) return 0;
	vis[3] = 1;
	dfs(a[3],1);
	if(!flag) puts("No answer!");
	return 0;
}
2024/2/23 09:30
加载中...