4个数计算24点
四个数的加减乘除
任意1-10中的4个数字,使用加减乘除计算得出24结果的可能组合(java版)
怎样实现一个计算24点的程序?
作者:赵冯平
链接:https:
来源:知乎
#include<iostream>
#include<cmath>
using namespace std;
double st1[100],st2[100];int p=0;
bool f24=0;
char op[100];
void pp(int n) {
for(int i=0; i<n; i++)cout<<" ";
}
void prn(double a[],int n) {
pp((4-n)*8);
for(int i=0; i<n; i++)cout<<a[i]<<" ";
cout<<endl;
}
void prints(){
for(int i=0;i<p;i++)cout<<st1[i]<<' '<<op[i]<<' '<<st2[i]<<" ";
cout<<endl;
}
void d24(double a[],int n) {
if(n==1) {
if(fabs(a[0]-24)<0.00000001){
prints();
f24=1;
}else{
}
} else {
int i,j;
for(i=0; i<n-1; i++) {
for( j=i+1; j<n; j++) {
double ai,aj;
ai=a[i],aj=a[j];
a[i]=a[i]+a[j];
a[j]=a[n-1];
st1[p]=ai;st2[p]=aj;op[p]='+';p++;
d24(a,n-1);
p--;
a[i]=ai;
a[j]=aj;
a[i]=ai-aj;
a[j]=a[n-1];
st1[p]=ai;st2[p]=aj;op[p]='-';p++;
d24(a,n-1);
p--;
a[i]=ai;
a[j]=aj;
a[i]=a[i]*a[j];
a[j]=a[n-1];
st1[p]=ai;st2[p]=aj;op[p]='*';p++;
d24(a,n-1);
p--;
a[i]=ai;
a[j]=aj;
a[i]=aj-ai;
a[j]=a[n-1];
st1[p]=aj;st2[p]=ai;op[p]='-';p++;
d24(a,n-1);
p--;
a[i]=ai;
a[j]=aj;
if(aj!=0) {
a[i]=ai/aj;
a[j]=a[n-1];
st1[p]=ai;st2[p]=aj;op[p]='/';p++;
d24(a,n-1);
p--;
a[i]=ai;
a[j]=aj;
}
if(ai!=0) {
a[i]=aj/ai;
a[j]=a[n-1];
st1[p]=aj;st2[p]=ai;op[p]='/';p++;
d24(a,n-1);
p--;
a[i]=ai;
a[j]=aj;
}
}
}
}
}
int main() {
double a[10];
for(;;) {
for(int i=0; i<4; i++)cin>>a[i];
if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0) break;
f24=0;
d24(a,4);
if(f24) cout<<"YES"<<endl ;
else cout<<"NO"<<endl;
}
return 0;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1169905a703b167a105da4cc269f0fea.png#pic_center)