提问
查看原帖
提问
398190
Celestial_Intertwine楼主2021/9/5 16:52

请问为什么我改变了 calc 函数中 if 判断条件的顺序就会有不一样的结果

AC 代码

#include<iostream>
#include<algorithm>
using namespace std;
int a[5];
char opt[5]={' ','+','-','*','/'};
int calc(int x,int op,int y){
	if(op==1) return x+y;
	if(op==2) return max(x,y)-min(x,y);
	if(op==3) return x*y;
	if(y==0 || x<y || x%y!=0) return -999999;
	return x/y;
}
void print(int a,int b,int c,int d,int e,int f,int k1,int k2,int k3){
	printf("%d%c%d=%d\n",max(a,b),opt[k1],min(a,b),calc(max(a,b),k1,min(a,b)));
    printf("%d%c%d=%d\n",max(c,d),opt[k2],min(c,d),calc(max(c,d),k2,min(c,d)));
    printf("%d%c%d=%d\n",max(e,f),opt[k3],min(e,f),calc(max(e,f),k3,min(e,f)));
    exit(0); 
}
int main(){
	for(int i=1;i<=4;++i) cin>>a[i];
	sort(a+1,a+5);
	do{
		for(int i=1;i<=4;++i)
			for(int j=1;j<=4;++j)
				for(int k=1;k<=4;++k){
					if(calc(calc(calc(a[1],i,a[2]),j,a[3]),k,a[4])==24)
					    print(a[1],a[2],calc(a[1],i,a[2]),a[3],calc(calc(a[1],i,a[2]),j,a[3]),a[4],i,j,k);
					if(calc(calc(a[1],i,a[2]),k,calc(a[3],j,a[4]))==24) 
						print(a[1],a[2],a[3],a[4],calc(a[1],i,a[2]),calc(a[3],j,a[4]),i,j,k); 
				}
						
	}while(next_permutation(a+1,a+5));
	cout<<"No answer!"<<endl;
	return 0;
} 

50分 RE 代码

#include<iostream>
#include<algorithm>
using namespace std;
int a[5];
char opt[5]={' ','+','-','*','/'};
int calc(int x,int op,int y){
	if(op==1) return x+y;
	if(op==2) return max(x,y)-min(x,y);
	if(op==3) return x*y;
	if(x%y!=0 || y==0 || x<y) return -999999;
	return x/y;
}
void print(int a,int b,int c,int d,int e,int f,int k1,int k2,int k3){
	printf("%d%c%d=%d\n",max(a,b),opt[k1],min(a,b),calc(max(a,b),k1,min(a,b)));
    printf("%d%c%d=%d\n",max(c,d),opt[k2],min(c,d),calc(max(c,d),k2,min(c,d)));
    printf("%d%c%d=%d\n",max(e,f),opt[k3],min(e,f),calc(max(e,f),k3,min(e,f)));
    exit(0); 
}
int main(){
	for(int i=1;i<=4;++i) cin>>a[i];
	sort(a+1,a+5);
	do{
		for(int i=1;i<=4;++i)
			for(int j=1;j<=4;++j)
				for(int k=1;k<=4;++k){
					if(calc(calc(calc(a[1],i,a[2]),j,a[3]),k,a[4])==24)
					    print(a[1],a[2],calc(a[1],i,a[2]),a[3],calc(calc(a[1],i,a[2]),j,a[3]),a[4],i,j,k);
					if(calc(calc(a[1],i,a[2]),k,calc(a[3],j,a[4]))==24) 
						print(a[1],a[2],a[3],a[4],calc(a[1],i,a[2]),calc(a[3],j,a[4]),i,j,k); 
				}
						
	}while(next_permutation(a+1,a+5));
	cout<<"No answer!"<<endl;
	return 0;
} 
2021/9/5 16:52
加载中...