解题思路:

枚举所有可能的情况。

首先对四个数字进行全排列,对于每一种排列,通过dfs模拟出带不同括号的情况,对于每一种情况,再进行加减乘除的运算,看有没有一种情况能算出24的结果。

这里还有2个问题:

1 要对输入进行转换,尤其是A、10、J、Q、K这样的特殊牌。

2 在进行除法运算前要进行判断,首先除数不能为0,不然程序会崩溃,然后要能整除。

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string.h>
 4 #include <algorithm>
 5 using namespace std;
 6 int k;
 7 int card[4];
 8 char temp[4];
 9 //处理几张特殊的牌
10 void tra(int i)
11 {
12     if(strcmp(temp, "A")==0)        card[i]=1;
13     else if(strcmp(temp, "10")==0)        card[i]=10;
14     else if(strcmp(temp, "J")==0)        card[i]=11;
15     else if(strcmp(temp, "Q")==0)        card[i]=12;
16     else if(strcmp(temp, "K")==0)        card[i]=13;
17     else card[i] = (int)(temp[0]-48);
18 }
19 int judge24(int n)
20 {
21     return (n == 24);
22 }
23 void dfs(int sum,int cur, int m)
24 {
25     if(k == 1)    return;
26   if(m == 3)
27   {
28     if(judge24(sum+cur) || judge24(sum-cur) || judge24(sum*cur))
29     {
30         //printf("%d %d\n",sum,cur);
31         k = 1;
32     }
33     else if(cur!=0 && sum%cur==0 && judge24((sum/cur)))
34     {//注意除数不能为0且必须能整除
35         //printf("%d %d\n",sum,cur);
36         k=1;
37     }
38     return;
39   }
40   //通过这种搜索虚拟不同的括号从而改变运算顺序
41   dfs(sum+cur, card[m+1], m+1);
42   dfs(sum-cur, card[m+1], m+1);
43   dfs(sum*cur, card[m+1], m+1);
44   if(cur!=0 && sum%cur==0)  dfs(sum/cur, card[m+1], m+1);
45
46   dfs(sum, cur+card[m+1], m+1);
47   dfs(sum, cur-card[m+1], m+1);
48   dfs(sum, cur*card[m+1], m+1);
49   if(card[m+1]!=0 && cur%card[m+1]==0)  dfs(sum, cur/card[m+1], m+1);
50 }
51 int main(void)
52 {
53     //freopen("1427.in", "r", stdin);
54     while(scanf("%s",temp) != EOF)
55   {
56       k = 0;
57       tra(0);
58     for(int i=1; i<4; i++)
59     {
60         scanf("%s",temp);
61         tra(i);    //用于字符转化为数字
62     }
63     sort(card, card+4);//要先排序才能进行全排列
64     do
65     {
66       dfs(card[0], card[1], 1);    //对于每一个排列,进行dfs来构造不同的运算顺序
67     }while(next_permutation(card, card+4) && k==0);//通过全排列构造不同的算式
68     if(k == 0)  printf("No\n");
69     else printf("Yes\n");
70   }
71     return 0;
72 }//2015-07-25 

转载于:https://www.cnblogs.com/mycd/p/5657145.html

HDU1427 速算24点相关推荐

  1. HDU1427 速算24点【DFS】

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. 速算C语言程序设计,C语言程序设计课程设计-速算24.doc

    该设计论文已经通过各大高校老师审核认可并通过答辩,准确完整无误.欢迎大家下载学习交流.如有疑问可随时联系店主,竭诚为您解答!! 应用技术学院 课 程 设 计 报 告 课程名称 C语言课程设计 课题名称 ...

  3. 24速算c语言实训报告ppt,C语言课程设计(速算24).doc

    <> 课程设计报告 速算24专业:计算机科学与技术班级:姓名:指导教师:成绩: 计算机与信息工程系 二0一四年二月二十日 目录 1.该系统的功能描述.................... ...

  4. HDU 1427 速算24点(dfs)

    Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/ ...

  5. Python写个小游戏:速算24点(上)

    文章目录 前言 速算24点 1. 玩法简介 2. 游戏流程 3. 搭建游戏界面 1). 基本界面 2). 洗牌.发牌 洗牌 发牌 3). 计时器 4). 玩家输入公式(答案) StringVar类 按 ...

  6. c语言速算24课程设计,C语言速算24数据结构课程设计.docx

    课程设计 ( 论文 ) 题 目 名 称 速算 24 课 程 名 称 数据结构课程设计 学 生 姓 名 王浩明 学 号 0941301253 系 .专 业 信息工程系.信息类 指 导 教 师 谢兵 20 ...

  7. Python写个小游戏:速算24点(下)

    文章目录 前言 速算24点 1. 玩法简介 2. 游戏流程 3. 剩下的部分 1). 关卡 / 分数信息 IntVar类 2). 提示按钮 图片 按钮 3). 重新发牌 4. 让电脑计算24点 1). ...

  8. 速算C语言程序设计,C语言速算24数据结构课程设计最终版(备份存档)

    <C语言速算24数据结构课程设计.doc>由会员分享,可免费在线阅读全文,更多与<C语言速算24数据结构课程设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com ...

  9. HDU 1427 速算24点 (深搜)

    题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...

  10. 24速算c语言实训报告ppt,C语言速算24数据结构课程设计.doc

    C语言速算24数据结构课程设计.doc 课程设计论文题 目 名 称 速算 24 课 程 名 称 数据结构课程设计 学 生 姓 名 王浩明 学 号 0941301253 系 .专 业 信息工程系.信息类 ...

最新文章

  1. 使用WinSCP在WIndows与树莓派之间传递文件
  2. XShell+Xmanager实现在XShell中显示远程服务器的图形界面
  3. python web自动化_Selenium+Python Web自动化
  4. java创建oracle序列_java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
  5. matlab产生一组均为一的矩阵,在matlab中如何从一组数中得到随机数组成一个n*n的矩阵...
  6. oracle sql为null值,在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办
  7. python数据类型有哪些、分别有什么用途_python中的数据类型有哪些
  8. PHP中几种b2b,用php开发 b2b 用什么架构?
  9. java中final语句_Java中使用非final变量的不可访问语句
  10. Data truncation: Out of range value for column ‘quanity‘ at row 问题解决方案
  11. macos 设置内外网同时访问
  12. WARNING: Too many active WebGL contexts. Oldest context will be lost.
  13. 高等数学:第七章 空间解析几何(1)空间解析几何与向量代数
  14. 按计算机应用领域分类,按计算机用途分类
  15. TreeUtil(树形结构转换)
  16. javascript学习-SVG
  17. 【畅捷通T+】登录提示 列“MarketingCloudUserId”不属于表 。
  18. 想和大家讲述一个普通人的生活:现在差劲不可怕,只要最后是好的就行
  19. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型
  20. 如何用ADB命令删除Android中的系统应用

热门文章

  1. java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
  2. 安装百度库,C调用Python出错,卸载、再重装消失
  3. python3多进程执行循环_Python3 并发编程之多进程(一)
  4. mysql 抓包工具_好用的MySQL抓包工具:sniffer-agent
  5. 网页英文 错位_网页错位原因解决方法
  6. python计算无穷级数求和,无穷级数求和的积分审敛法
  7. java计算两点距离_Java 使用经度计算两点之间的距离?
  8. 亲爱的,别把上帝缩小了 ---- 读书笔记4
  9. Koa2 之文件上传下载
  10. 大数据踩坑之旅: 从数据可视化到商业智能