暴力求解24点
要注意一下double的精度问题
给几个复杂样例 2 2 11 11,3 3 8 8,1 4 5 6。
#include<bits/stdc++.h>
using namespace std;
double p24[5];
int p4[5];
int ansf[4];
double ans[5];
double ca(double n1,double n2,int a) {
if(a==1) return n1+n2;
if(a==2) return n1-n2;
if(a==3) return n1*n2;
if(a==4) return n1/n2;
if(a==5) return n2-n1;
if(a==6) return n2/n1;
}
int cal(double n1,double n2,double n3,double n4) {
double sum;
for(int i=1; i<=6; i++) {
for(int j=1; j<=6; j++) {
for(int k=1; k<=6; k++) {
sum=ca(ca(ca(n1,n2,i),n3,j),n4,k);
if(sum<=24.1&&sum>=23.9) {
ansf[1]=i;
ansf[2]=j;
ansf[3]=k;
ans[1]=n1,ans[2]=n2,ans[3]=n3,ans[4]=n4;
return 1;
}
sum=ca(ca(n1,n2,i),ca(n3,n4,j),k);
if(sum<=24.1&&sum>=23.9) {
ansf[1]=i;
ansf[2]=j;
ansf[3]=k;
ans[1]=n1,ans[2]=n2,ans[3]=n3,ans[4]=n4;
return 2;
}
}
}
}
return 0;
}
int main() {