请问为什么我改变了 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;
}