直接看代码吧,写得搞清楚了,so easy
#include<iostream> #include<cmath> using namespace std; double a[4]; int search(int n){ if(n==1){ //判断是否为24点 if(fabs(a[0]-24.0)<0.0000001) return 1; return 0; } for(int i=0;i<4;i++) //4个数里取两个进行加减乘除,再递归计算剩下的3,2知道剩下一个时判断是否为24点 for(int j=i+1;j<4;j++){ double x,y; x=a[i]; y=a[j]; a[j]=a[n-1]; a[i]=x+y; if(search(n-1)) return 1; a[i]=x-y; if(search(n-1)) return 1; a[i]=y-x; if(search(n-1)) return 1; a[i]=x*y; if(search(n-1)) return 1; if(y){ a[i]=x/y; if(search(n-1)) return 1; } if(x){ a[i]=x/y; if(search(n-1)) return 1; } a[i]=x; a[j]=y; } return 0; } int main(){ int T; cin>>T; while(T--){ for(int i=0;i<4;i++) //1<=a[i]<=13 cin>>a[i]; if(search(4)) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; }