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 特点 ...
随机推荐
- Eclipse+SVN搭建开发环境
目前我们开发环境为:windows service 2008 r2 x64 现在开始记录一下eclipse+SVN环境搭建过程: 1,)下载 VisualSVN-Server-3.4.2-x64:ht ...
- PostgreSQL Replication之第十一章 使用Skytools(4)
11.4 使用 londiste 复制数据 pgq是一个叫做londiste的复制工具的核心.londiste 的核心是有一个比如比Slony 更加简单,容易使用的机制.如果您在一个大的安装中使用Sl ...
- Leetcode: String to Integer
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- As3 Anchored Container 代码设置锚点旋转
原文地址:http://jamesvango.co.uk/blog/?p=136
- java将数组中的零放到末尾
package com.shb.java; /** * 将数组中的0放到数组的后边,然后原来的非零数的顺序不改变 * @author BIN * */ public class Demo2{ publ ...
- paper 54 :图像频率的理解
我一直在思考一个问题,图像增强以后,哪些方面的特征最为显著,思来想去,无果而终!翻看了一篇知网的paper,基于保真度(VIF)的增强图像质量评价,文章中指出无参考质量评价,可以从三个方面考虑:平均梯 ...
- paper 1:图像特征提取
特征提取是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点.连续的曲线或者连 ...
- sql 登录注入
DataTable dt= SqlHelper.ExecuteDataTable(System.Data.CommandType.Text, String.Format("select * ...
- linux下奇怪的“重名”文件
是这样的,文件创建是通过远程命令来进行的. 就是在表单中输入命令,然后使用php的system来执行. 表单使用的是多行文本输入框. 可能某次使用 类似touch这种命令创建文件的时候多按了一次回车, ...
- 【Install】我是如何安装Linux类系统的
安装系统:ubuntu12.04 i386 DVD U盘启动12.04live系统 连线,设置连接 安装系统到硬盘 “语言支持”,更新 安装gnome经典界面 sudo apt-get i ...