`
king_tt
  • 浏览: 2228586 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

UVa 10344 - 23 out of 5, 智力小游戏:算23点

 
阅读更多

FILE 10344-23 out of 5 7004
31.42%
1882
73.33%

题目链接:

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;
}


—— 生命的意义,在于赋予它意义。

原创http://blog.csdn.net/shuangde800By D_Double (转载请标明)








分享到:
评论

相关推荐

    Uva 1510 - Neon Sign

    ### Uva 1510 - Neon Sign #### 问题背景与描述 在题目“Uva 1510 - Neon Sign”中,我们面对的是一个霓虹灯招牌设计问题。该霓虹灯招牌由一系列位于圆周上的角点组成,并通过发光管连接这些角点。发光管有两种...

    UVA100~200---52道题accept代码,均顺利accept过

    这些文件名代表的是在UVA(University of Virginia)在线判题系统上解决的编程题目,主要是C++语言编写的解决方案。UVA是一个知名的在线编程竞赛平台,它提供了大量的算法问题供程序员挑战,有助于提高编程技能和...

    UVaOJ-401(Palindromes).zip_401 Palindromes

    标题中的"UVaOJ-401(Palindromes)"表明这是一个关于解决UVa Online Judge(UVa OJ)上编号为401的编程挑战,该挑战的主题是"Palindromes",即回文串。回文串是指一个字符串无论从前读到后还是从后读到前都是相同的,...

    UVA133-TheDoleQueue.zip_site:www.pudn.com_uva133

    UVA(University of Virginia)在线判题系统提供了丰富的算法题目供程序员挑战,其中编号为133的"The Dole Queue"(救济金发放问题)是一个典型的算法问题,旨在测试程序员对优先级队列(Priority Queue)的理解和...

    uva705-Slash-Maze-.rar_Slash_uva705

    【标题】"uva705-Slash-Maze-.rar_Slash_uva705" 指向的是一个在UVa Online Judge (UVa OJ) 上提交并通过的编程问题,具体为问题编号705,名为"Slash Maze"。这个压缩包很可能包含了该问题的解决方案源代码。 ...

    开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip

    开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip,两年来每天都在解决一个uva在线裁判问题,算起来…

    Algorithm-UVA-Solutions-in-Python.zip

    UVA(University of Virginia)在线判题系统是全球知名的算法竞赛平台,汇集了大量算法题目,吸引了无数编程爱好者挑战自我,提升算法能力。"Algorithm-UVA-Solutions-in-Python.zip"这个压缩包文件正是针对UVA竞赛...

    uva532-Dungeon-Master.rar_dungeon

    《UVA532 Dungeon Master:解密游戏编程的深度探索》 在计算机科学与编程领域,UVA(University of Virginia)在线判题系统是一个深受程序员喜爱的平台,它提供了丰富的算法题目供学习者挑战。其中,编号为532的...

    ACM算法经典书籍----最全最详细的书籍推荐!

    ### ACM算法经典书籍知识点梳理 #### 一、CLRS - **书名**: *Introduction to Algorithms*(简称CLRS) - **作者**: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - **特点**: 作为...

Global site tag (gtag.js) - Google Analytics