求调错 40分
  • 板块P1236 算24点
  • 楼主ColinKIA
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/4/30 18:22
  • 上次更新2023/10/28 02:34:10
查看原帖
求调错 40分
647306
ColinKIA楼主2022/4/30 18:22

前缀和是不是求错了

#include <bits/stdc++.h>
using namespace std;
int a[6],d[20];
char b[6],c[6]="+-*/";
bool vis[6];
void print(int k){
	for(int i=1;i<=k-1;i++){
		if(b[i]=='+'){
			printf("%d+%d=%d\n",d[i],d[i+1]-d[i],d[i+1]);
		}else if(b[i]=='-'){
			printf("%d-%d=%d\n",d[i],d[i]-d[i+1],d[i+1]);
		}else if(b[i]=='*'){
			printf("%d*%d=%d\n",d[i],d[i+1]/d[i],d[i+1]);
		}else if(b[i]=='/'){
			printf("%d/%d=%d\n",d[i],d[i]/d[i+1],d[i+1]);
		}
	}
}
bool check(){
	for(int i=1;i<=4;i++){
		if(vis[i]==0){
			return 1;
		} 
	}
	return 0;
}
void dfs(int step){
	if(check()==0&&d[step-1]==24){
		print(step-1);
		exit(0);
	}
	for(int i=1;i<=4;i++){
	    for(int j=0;j<=3;j++){
	    	if(vis[i]==0){
	    		vis[i]=1;
	    		if(c[j]=='+'){
	    			d[step]=d[step-1]+a[i];
					b[step-1]=c[j];
				}else if(c[j]=='-'){
					d[step]=d[step-1]-a[i];
					b[step-1]=c[j];
				}else if(c[j]=='/'&&d[step-1]%a[i]==0){
					d[step]=d[step-1]/a[i];
					b[step-1]=c[j];
				}else{
					d[step]=d[step-1]*a[i];
					b[step-1]=c[j];
				}
				dfs(step+1);
				vis[i]=0;
			}
		}
	} 
}
int main(){
	for(int i=1;i<=4;i++){
		scanf("%d",&a[i]);
	}
	dfs(1);
	printf("No answer!");
} 
2022/4/30 18:22
加载中...