hihoCoder 搜索一·24点
题目1 : 搜索一·24点
描述
周末,小Hi和小Ho都在家待着。在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。小Ho:玩点什么好呢?小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。小Ho:好啊,好啊。<经过若干局游戏之后>小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?小Hi:让我想想。<过了几分钟>小Hi:我知道了!其实很简单嘛。提示:24点
输入
第1行:1个正整数, t,表示数据组数,2≤t≤100。第2..t+1行:4个正整数, a,b,c,d,1≤a,b,c,d≤10。
输出
第1..t行:每行一个字符串,第i行表示第i组能否计算出24点。若能够输出"Yes",否则输出"No"。
- 样例输入
-
2 5 5 5 1 9 9 9 9 - 样例输出
-
Yes No
刚开始使用搜索枚举出所有类型,然后怎么算也没办法算出5 5 5 1是怎么样得出24点的,如果那个时候知道了要考虑浮点数,就不会有下面这种方法解题啦!o(╯□╰)o![]()
提示中说:枚举所有数字与运算符,然后通过
(((a ⊙ b) ⊙ c ) ⊙ d) ((a ⊙ b) ⊙ (c ⊙ d))
这两种类型的式子计算,首先我们可以想一想,如果枚举所有数字的话,普通枚举一定会出现重复的情况,比如5 5 5 1,这组数中有3个5存在,即使全部枚举也不会超时,但是,更重要的是算法优化嘛!C++中刚好提供了这么一个函数,
next_permutation(a,a+4); //操作对象是数组a前四位
它是用来把一个数组(或容器)生成下一排列。此处是递增排列,也就是1 2 3 4的下一排列是1 2 4 3另外还有一个与之类似的函数是
prev_permutation(a,a+4); //操作对象是数组a前4位
使用这两个函数不就不会出现那种重复枚举的情况啦!不过首先要对数组进行排序
现在数字枚举的问题解决啦!
然后就是运算符枚举了!这样的话既然有三个位置需要填充运算符,我们可以用一个三重循环来枚举所有的情况,然后针对每一种情况计算所得出的结果!
如果答案是24,直接停止枚举。输出"Yes",否则输出"No"。
Over
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
double a[4];
bool flag;
double so(double a,double b,int k)
{
double s=0.0;
switch(k)
{
case 0:s=a+b;break;
case 1:s=a-b;break;
case 2:s=a*b;break;
case 3:if(b!=0)s=a/b;break;
case 4:s=b-a;break;
case 5:if(a!=0)s=b/a;break;
}
return s;
}
bool pan(int i,int j,int k)
{
if(so(so(so(a[0],a[1],i),a[2],j),a[3],k)==24)return true;
if(so(so(a[0],a[1],i),so(a[2],a[3],k),j)==24)return true;
return false;
}
void solve()
{
for(int i=0; i<6; i++)
for(int j=0; j<6; j++)
for(int k=0; k<6; k++)
if(pan(i,j,k))
{
flag=true;
return;
}
}
int main()
{
int N;
cin>>N;
while(N--)
{
flag=false;
for(int i=0; i<4; i++)
cin>>a[i];
sort(a,a+4);
do
{
solve();
if(flag)break;
}
while(next_permutation(a,a+4));
if(flag)printf("Yes\n");
else printf("No\n");
}
return 0;
}
hihoCoder 搜索一·24点的更多相关文章
- hihocoder 九十八周 搜索一 24点
题目1 : 搜索一·24点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 周末,小Hi和小Ho都在家待着. 在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副 ...
- hiho一下 第九十八周 搜索一·24点
题目1 : 搜索一·24点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 周末,小Hi和小Ho都在家待着. 在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副 ...
- 【hihocoder 1304】搜索一·24点
[题目链接]:http://hihocoder.com/problemset/problem/1304 [题意] [题解] 按照题目给的方法搜索就好; 那个方法很棒啊. 注意除0; 然后是浮点数的比较 ...
- hihoCoder搜索二·骑士问题
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> ...
- 在Hadoop分布式文件系统的索引和搜索
FROM:http://www.drdobbs.com/parallel/indexing-and-searching-on-a-hadoop-distr/226300241?pgno=3 在今天的信 ...
- ASP.NET MVC+Bootstrap个人博客之后台dataTable数据列表(五)
jQuery dataTables 插件是一个优秀的表格插件,是后台工程师的福音!它提供了针对数据表格的排序.浏览器分页.服务器分页.查询.格式化等功能.dataTables 官网也提供了大量的演示 ...
- 转:selenium webdriver 执行javascript代码
在用selenium webdriver 编写web页面的自动化测试代码时,可能需要执行一些javascript代码,selenium本身就支持执行js,我们在代码中import org.openqa ...
- 09_Python定义方法_Python编程之路
有关Python判断与循环的内容我们上几节已经跟大家一起学习了,这一节我们主要针对def 做一个讲解 def 定义一个方法 在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python ...
- Mac 上有哪些鲜为人知且极大提高效率的工具?
来源:知乎文章收录于:风云社区SCOEE,提供上千款各类mac软件下载 1. Focus 功能: 屏蔽影响你学习的网站. 同类软件:Self Control, Rescue Time 特点 ...
随机推荐
- IntelliJ IDEA 常用设置讲解2
IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 如上图 Gif 所示, ...
- 【IOS】2.基础
1.Identifers命名规则 Identifers is combined with letters, underline, dollars, numbers must begin with le ...
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- bean中集合属性的配置
在实际的开发中,有的bean中会有集合属性,如下: package com.sevenhu.domain; import java.util.List; /** * Created by hu on ...
- linux第6天 流协议-粘包
今天学习的主要是对第5天的加强. 比如服务器的多进程,点对点应用聊天程序.父进程子进程互发消息.等等. 流协议-粘包 一般TCP协议会出现粘包,粘包产生的原因一般为.TCP协议是流式传输,不会根据用户 ...
- struts不同session范围添加、访问属性
第01步:编写bean类 package com.self.bean; import java.util.Date; public class User { private Date birthday ...
- android EditText长按屏蔽ActionMode context菜单但保留选择工具功能
最近项目要求屏蔽EditText 长按出来的ActionMode菜单,但是要保留选择文本功能.这个屏蔽百度会出现各种方法,这里说一下我的思路: 1.屏蔽百度可知setCustomSelectionAc ...
- PAT乙级 1027. 打印沙漏(20)
1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...
- Bug测试报告--俄罗斯方块--新蜂
项目名:俄罗斯方块 组名:新蜂 测试者:韩媛媛(nice!团队) 用户需求规格说明书URL:http://www.cnblogs.com/Boxer1994/p/6084035.html 组长博客UR ...
- 使用 nano 的时候提示找不到 libncursesw.so.5 这个共享库
由于拿nano来练习pacman这个包管理系统,也就是卸了装,装了卸.但是后来当我想用 nano 编辑文件的时候,系统提示标题上说的这错误. 不知道做了什么,难道是误删了什么东西...后来几番搜索,用 ...