标签:
题意很简单,给出5个数字,你可以使用 ‘ + ’ , ‘ - ’ , ‘ * ’运算符(运算符没有优先级关系),使得最后计算的结果等于23,其中给出的5个数字可以任意改变顺序。
1 1 1 1 1 1 2 3 4 5 2 3 5 7 11
No Yes Yes
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
int flag=0;
int vis[55];
int a[6];
char c[]= {'+','-','*'};
int DFS(int i ,int ans,int num)
{
if(flag||num>5)
return 0;
if(ans==23&&num==5)
{
flag=1;
return 1;
}
for(int j=0; j<5; j++)
for(int i=0; i<3; i++)
{
if(vis[j]==0)
{
vis[j]=1;
if(i==0)
DFS(j,ans+a[j],num+1);
else if(i==1)
DFS(j,ans-a[j],num+1);
else
DFS(j,ans*a[j],num+1);
vis[j]=0;
}
}
return 0;
}
int main()
{
while(~scanf("%d",&a[0]))
{
flag=0;
for(int i=1; i<5; i++)
scanf("%d",&a[i]);
for(int i=0; i<5; i++)
{
memset(vis,0,sizeof(vis));
vis[i]=1;
DFS(i,a[i],1);
if(flag)
break;
}
if(flag==0)
printf("No\n");
else
printf("Yes\n");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/became_a_wolf/article/details/48084617