只算a?b?c?d 50pts.
算上(a?b)?(c?d) 只剩30pts.
本人拍不出锅,自己造了几组数据,也对了.
关键他MLE,大家帮忙看下为啥会MLE谢谢.
#include <iostream>
#include <algorithm>
using namespace std;
int a[5];
int fh[4];
int f(int a,int b,int op){
if(op==1){
return a+b;
}
if(op==2){
return a-b;
}
if(op==3){
return a*b;
}
if(op==4){
if(b==0)return -10000;
if(a%b!=0)return -10000;
return a/b;
}
}
int prt(int op){
if(op==1)cout<<"+";
if(op==2)cout<<"-";
if(op==3)cout<<"*";
if(op==4)cout<<"/";
}
int ss1,ss2,ss3,ss;
int main(){
for(int i=1;i<=4;i++)cin>>a[i];
sort(a+1,a+4);
bool y=0;
do{
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
for(int k=1;k<=4;k++){
fh[1]=i;
fh[2]=j;
fh[3]=k;
ss=a[1];
for(int l=2;l<=4;l++){
ss=f(ss,a[l],fh[l-1]);
if(ss==-10000){
break;
}
}
if(ss==24){
ss=a[1];
for(int l=2;l<=4;l++){
cout<<ss;
prt(fh[l-1]);
ss=f(ss,a[l],fh[l-1]);
cout<<a[l]<<"="<<ss<<endl;
}
y=1;
goto label;
}
ss1=f(a[1],a[2],fh[1]);
ss2=f(a[3],a[4],fh[3]);
ss3=f(ss1,ss2,fh[2]);
if(ss3==24&&ss1!=-10000&&ss2!=-10000){
cout<<a[1];
prt(fh[1]);
cout<<a[2]<<"="<<ss1<<endl;
cout<<a[3];
prt(fh[3]);
cout<<a[4]<<"="<<ss2<<endl;
cout<<ss1;
prt(fh[2]);
cout<<ss2<<"="<<ss3<<endl;
y=1;
goto label;
}
}
}
}
}while(next_permutation(a+1,a+4));
label:cout<<"";
if(!y){
cout<<"No answer!"<<endl;
}
return 0;
}