HDU-1427-速算24点

4个数通过 +,—,*,/和加括号,计算得24,

枚举数字和运算符,DFS即可,注意题目要求计算过程中都不能出现小数,所以做除法时稍作处理

枚举数组可用algorithm里的next_permutation

The next_permutation() function attempts to transform the given range of elements [start,end) into the next lexicographically greater permutation of elements. If it succeeds, it returns true, otherwise, it returns false.

#include

#include

#include

#include

#include

using namespace std;

int flag;

int num[4];

int cmp(const void *a,const void *b)

{

return *(int *)a-*(int *)b;

}

void dfs(int sum,int cur,int m)

{

if(flag)

return;

if(m==3)

{

if(sum+cur==24||sum-cur==24||sum*cur==24)

flag=1;

if(cur!=0&&sum%cur==0&&sum/cur==24)

flag=1;

return;

}

dfs(sum+cur,num[m+1],m+1); //先计算前一部分

dfs(sum-cur,num[m+1],m+1);

dfs(sum*cur,num[m+1],m+1);

if(cur!=0&&sum%cur==0)

dfs(sum/cur,num[m+1],m+1);

dfs(sum,cur+num[m+1],m+1); //先计算后一部分,相当于加括号

dfs(sum,cur-num[m+1],m+1);

dfs(sum,cur*num[m+1],m+1);

if(num[m+1]!=0&&cur%num[m+1]==0)

dfs(sum,cur/num[m+1],m+1);

}

int main()

{

int i;

char str[5];

while(scanf("%s",str)!=EOF)

{

if(strlen(str)==2)

num[0]=10;

else

{

if(str[0]=='A')

num[0]=1;

else if(str[0]=='J')

num[0]=11;

else if(str[0]=='Q')

num[0]=12;

else if(str[0]=='K')

num[0]=13;

else

num[0]=str[0]-'0';

}

for(i=1;i<=3;i++)

{

scanf("%s",str);

if(strlen(str)==2)

num[i]=10;

else

{

if(str[0]=='A')

num[i]=1;

else if(str[0]=='J')

num[i]=11;

else if(str[0]=='Q')

num[i]=12;

else if(str[0]=='K')

num[i]=13;

else

num[i]=str[0]-'0';

}

}

qsort(num,4,sizeof(num[0]),cmp);

flag=0;

do

{

dfs(num[0],num[1],1);

}while(next_permutation(num,num+4)&&!flag);

if(flag)

printf("Yes\n");

else

printf("No\n");

}

return 0;

}

速算24点java_HDU-1427-速算24点相关推荐

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

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

  2. HDU 1427 速算24点

    http://acm.hdu.edu.cn/showproblem.php?pid=1427 C++版本一 题解:DFS 运算符可以重复,所以一共有4!*4^4种情况,并不算特别多(点数增多就是指数级 ...

  3. HDU 1427 速算24点(DFS) *

    原题链接:Here! 思路:这是get的别人的代码,写的很棒,用next_permutation()取代了括号的作用,精髓,经典 代码: /*Note:代码写的非常(๑•̀ㅂ•́)و✧用next_pe ...

  4. matlab 零速检测,基于多步态零速检测的MEMS IMU室内定位技术

    1. 引言 由于互联网的发展.移动设备和各种个人设备的流行,基于位置的服务(Location Based Services, LBS)变得越来越重要,用户获得定位信息可将其用于导航.跟踪.监测.信息推 ...

  5. Bee框架(速学)ORM框架(速学教程)

    Bee框架(速学)ORM框架(速学教程) Bee 是一个ORM框架.关注:省时/优雅.简易.自动( Tea: Timesaving/Tasteful, Easy, Automatic) 特性.减少开发 ...

  6. Solr相似度算法一:Lucene TF-IDF 相关性算分公式

     Solr相似度算法一:Lucene TF-IDF 相关性算分公式 Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文 ...

  7. 电脑如何测网速_Macbook Pro怎么查看网速Mac怎么测网速?

    苹果笔记本怎么查看网速苹果电脑怎么查网速这两个问题在网上大把的人询问,由于本身mac不提供图形化的网速查看软件,加入mac本身的软件少.所以不像Windows随便下载个软件即可查看网速.这里介绍两个软 ...

  8. 作业帮口算批改怎么开 作业帮口算批改如何用

    作业帮口算批改功能怎么用?作业帮最近全新改版的消息传的很火,新增了口算批改的功能,很吸引人.但是还有很多用户不是很清楚作业帮口算批改功能怎么用,下面是小编整理的关于作业帮口算批改功能怎么用的相关资讯, ...

  9. 超级计算机能算数学题吗,圆周率到底能不能算尽?人类拿超级计算机算了一下,结果不敢相信...

    校长科普 2018-12-11 01:16 圆周率到底能不能算尽?人类拿超级计算机算了一下,结果不敢相信 说到圆周率,读过书的小伙伴应该都很清楚吧,在数学课上最有意思的就是算圆周率了.记得校长初中的时 ...

  10. c语言坐标反算方位角函数,反三角函数/简易正反算or方位角转度分秒

    关于反三角函数的易语言模块很稀少,我就自己弄了一个,分享给大家,也方便那些 用易语言写建筑工程相关软件的程序员们 模块里呢包括反三角函数,简易正反算,方位角or度分秒ms互换 模块里 普通的三角函数: ...

最新文章

  1. 互联网大脑进化简史,华为云EI智能体加入-2018年7月新版
  2. 提高python执行效率_关于提高python程序执行效率的思路和想法
  3. 人脸属性迁移学习笔记
  4. 请务必注意 Redis 安全配置,否则将导致轻松被入侵
  5. CTFshow 反序列化 web267
  6. 新建文章1,改名后按回车
  7. 阿里云低延时直播RTS能力升级,让直播推流效果更佳
  8. c++循环执行一个函数_循环
  9. slice与substring与substr
  10. ubuntu安装tim
  11. Ionicons的使用
  12. python编写鸡兔同笼程序_Python解决鸡兔同笼问题的方法
  13. vue小练习(网页汇率器)
  14. BPMN,BPEL,XPDL
  15. ceph1--ceph基础/搭建ceph高可用集群
  16. 【刷爆LeetCode】七月算法集训(14)栈
  17. 时间戳转换年月日——记一次字节面试题(C++实现)
  18. annaconda 安装 opencv(cv2)
  19. Ant Design Vue 组件或图标的引入和使用
  20. 【ROS入门教程】---- 01 ROS介绍

热门文章

  1. Angelababy否认已怀身孕:我怎么不知道
  2. CorelDRAW Transparency(透明)效果(转)
  3. c语言之文件操作,C语言之——文件操作模式
  4. 测序总结,高通量测序名词
  5. mac修改默认python版本_Mac系统修改Python版本软链接
  6. Python爬虫实战之电影爬取过程
  7. 使用Unity实现VR中在黑板上写字(升级篇)(一)-----解决画笔穿透画板的问题
  8. Future 模式与 Promise 模式
  9. Unity 2d 用两种方式(shader textMeshPro)分别实现文字波浪形态
  10. Oracle之 PLSQL语言