poj2787 算24
每次枚举两个数,一个运算符,得到一个运算结果。在重复执行,直到只剩下一个数即可。
#include <iostream>
#include <cmath>
using namespace std;
int ans=0;
void dfs(double a[],int n)
{
int i,j,x,y,k,m;double b[4];
if(n==1&&a[0]>0&&fabs(a[0]-24)<0.0001) ans=1;
else if(n>1)
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j) continue;
for(m=k=0;k<n;k++)
if(k!=i&&k!=j) { b[m]=a[k]; m++;}
b[m]=a[i]+a[j]; dfs(b,m+1);
b[m]=a[i]-a[j]; dfs(b,m+1);
b[m]=a[i]*a[j]; dfs(b,m+1);
if(a[j]!=0)b[m]=a[i]/a[j]; dfs(b,m+1);
}
}
}
int main(int argc, char *argv[])
{
double a[4];
//freopen("24.txt","w",stdout);
while(cin>>a[0]>>a[1]>>a[2]>>a[3]&&(a[0]+a[1]+a[2]+a[3])!=0)
{
ans=0; dfs(a,4);
if(ans) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
浙公网安备 33010602011771号