题目大意
给出
T
T
T组数据,每组数据包含
4
4
4个数,接着就是
+
,
−
,
∗
,
/
+,-,*,/
+,−,∗,/
运算结果等于
24
24
24
题目解析
全排列后的序列,再逐一添加符号即可,减法的情况还要互换位置减
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int T;
int a[10],b[10];
bool vis[10],flag;
void fun(int lev,int sum)
{
if(flag) return;
if(lev>4)
{
if(sum==24)
flag=1;
return;
}
fun(lev+1,sum+b[lev]);
fun(lev+1,b[lev]-sum);
fun(lev+1,sum-b[lev]);
fun(lev+1,sum*b[lev]);
if(sum%b[lev]==0&&sum>=b[lev])
fun(lev+1,sum/b[lev]);
}
void dfs(int lev)
{
if(flag) return;
if(lev>4)
{
fun(2,b[1]);
return;
}
for(int i=1;i<=4;i++)
if(!vis[i])
{
b[lev]=a[i];
vis[i]=1;
dfs(lev+1);
vis[i]=0;
}
}
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
scanf("%d",&T);
while(T--)
{
flag=0;
for(int i=1;i<=4;i++)
scanf("%d",&a[i]);
dfs(1);
if(flag) printf("1\n");
else printf("0\n");
}
}