题目链接:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=1285
类型: 回溯
原题:
Your task is to write a program that can decide whether you can find an arithmetic expression consisting of five given numbers(1<=i<=5)
that will yield the value 23.
For this problem we will only consider arithmetic expressions of the following from:
where : {1,2,3,4,5} -> {1,2,3,4,5} is a bijective function
and {+,-,*} (1<=i<=4)
样例输入:
1 1 1 1 1
1 2 3 4 5
2 3 5 7 11
0 0 0 0 0
样例输出:
Impossible
Possible
Possible
题目大意:
这题的题意较好题解,游戏规则和扑克牌的“算24点”基本一样。
规则是这样的:给你5张牌, 然后要你任意用+,-, * 这三个符号,对这5个数字进行计算,使它们之和为23.
要你编程来判断所有的5张牌能否实现23点。
思路与总结:
这个游戏相信很多人小时候都玩过, 如果小时候就能编一个小程序来帮我们,那就。。。。。。看来会编程还是有点用的,
至少可以骗骗小孩...
如果用利用计算机,用递归回溯算法来做的话,那么将是很简单的一件事,只需要暴力地搜索出所有的排列,用所有的符号,
即可轻轻松松得到答案
代码实现:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int arr[5];
bool vis[5], flag;
void dfs(int cur, int sum){
if(flag) return; // 一旦找到方案,就可以一直退栈了
for(int i=0; i<5; ++i)if(!vis[i]){
vis[i] = true;
if(!cur)
dfs(cur+1, arr[i]);
else{
dfs(cur+1, sum-arr[i]); // 减法
dfs(cur+1, sum+arr[i]); // 加法
dfs(cur+1, sum*arr[i]); // 乘法
}
vis[i] = false; // 回溯
}
if(cur==5 && sum==23){
flag=true; return;
}
}
int main(){
#ifdef LOCAL
freopen("input.txt","r",stdin);
#endif
while(~scanf("%d%d%d%d%d",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4])){
if(!arr[0] && !arr[1] && !arr[2] && !arr[3] && !arr[4]) break;
flag = false;
memset(vis, 0, sizeof(vis));
dfs(0, 0);
if(flag) printf("Possible\n");
else printf("Impossible\n");
}
return 0;
}
—— 生命的意义,在于赋予它意义。
分享到:
相关推荐
### Uva 1510 - Neon Sign #### 问题背景与描述 在题目“Uva 1510 - Neon Sign”中,我们面对的是一个霓虹灯招牌设计问题。该霓虹灯招牌由一系列位于圆周上的角点组成,并通过发光管连接这些角点。发光管有两种...
这些文件名代表的是在UVA(University of Virginia)在线判题系统上解决的编程题目,主要是C++语言编写的解决方案。UVA是一个知名的在线编程竞赛平台,它提供了大量的算法问题供程序员挑战,有助于提高编程技能和...
标题中的"UVaOJ-401(Palindromes)"表明这是一个关于解决UVa Online Judge(UVa OJ)上编号为401的编程挑战,该挑战的主题是"Palindromes",即回文串。回文串是指一个字符串无论从前读到后还是从后读到前都是相同的,...
UVA(University of Virginia)在线判题系统提供了丰富的算法题目供程序员挑战,其中编号为133的"The Dole Queue"(救济金发放问题)是一个典型的算法问题,旨在测试程序员对优先级队列(Priority Queue)的理解和...
【标题】"uva705-Slash-Maze-.rar_Slash_uva705" 指向的是一个在UVa Online Judge (UVa OJ) 上提交并通过的编程问题,具体为问题编号705,名为"Slash Maze"。这个压缩包很可能包含了该问题的解决方案源代码。 ...
开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip,两年来每天都在解决一个uva在线裁判问题,算起来…
UVA(University of Virginia)在线判题系统是全球知名的算法竞赛平台,汇集了大量算法题目,吸引了无数编程爱好者挑战自我,提升算法能力。"Algorithm-UVA-Solutions-in-Python.zip"这个压缩包文件正是针对UVA竞赛...
《UVA532 Dungeon Master:解密游戏编程的深度探索》 在计算机科学与编程领域,UVA(University of Virginia)在线判题系统是一个深受程序员喜爱的平台,它提供了丰富的算法题目供学习者挑战。其中,编号为532的...
### ACM算法经典书籍知识点梳理 #### 一、CLRS - **书名**: *Introduction to Algorithms*(简称CLRS) - **作者**: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - **特点**: 作为...