看了看hzwer会了这道题
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
原先一直不理解怎么算括号,今天才发现,不是从第一个开始枚举的。。。
深搜啊
但是wa了,也许是精度问题网上说的
还是弱,进步太慢只会抄程序
#include<iostream>
#include<cstdio>
using namespace std;
int a[10],used[10];
bool dfs(int d,double num)
{
if(d==4)
{
double x=1e-6;
if(num-24<0.000001&&24-num<0.000001)
{
cout<<"YES"<<endl;
return 1;
}
}
for(int i=0;i<4;i++)
{
if(used[i])
continue;
used[i]=1;
if(dfs(d+1,num+a[i]))return 1;
if(dfs(d+1,num-a[i]))return 1;
if(dfs(d+1,num*a[i]))return 1;
if(dfs(d+1,a[i]-num))return 1;
if(a[i]!=0&&(dfs(d+1,num/a[i])))return 1;
if(num!=0&&dfs(d+1,a[i]/num))return 1;
used[i]=0;
}
return 0;
}
int main()
{
while(1)
{
for(int i=0;i<4;i++)
{
scanf("%d",&a[i]);
used[i]=0;
}
if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0)
break;
if(!dfs(0,0))
cout<<"NO"<<endl;
}
return 0;
}