标签:
题意很简单,给出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