题目链接 :http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3297
奇妙的23点
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
题意很简单,给出5个数字,你可以使用 ‘ + ’ , ‘ - ’ , ‘ * ’运算符(运算符没有优先级关系),使得最后计算的结果等于23,其中给出的5个数字可以任意改变顺序。
输入
输入
5
个数字,每个数字的大小范围为
[1,50]
。
输出
如果最后的运算结果可以等于
23,
输出
Yes,
不能的话输出
No
。
示例输入
1 1 1 1 11 2 3 4 52 3 5 7 11
示例输出
NoYesYes
提示
来源
示例程序
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- int a[10];
- bool f, vis[10];
- void dfs(int ans)
- {
- if(vis[1]&&vis[2]&&vis[3]&&vis[4]&&vis[5]&&ans==23)
- {
- f=1;
- return ;
- }
- for(int i=1;i<=5;i++)
- if(!vis[i])
- {
- vis[i]=1;
- dfs(ans+a[i]);
- dfs(ans*a[i]);
- dfs(ans-a[i]);
- vis[i]=0;
- }
- }
- int main()
- {
- while(~scanf("%d", &a[1]))
- {
- f=0;
- for(int i=2;i<=5;i++)
- scanf("%d", &a[i]);
- for(int i=1;i<=5;i++)
- {
- memset(vis,0,sizeof(vis));
- vis[i]=1;
- dfs(a[i]);
- }
- if(f) printf("Yes\n");
- else printf("No\n");
- }
- return 0;
- }