hiho一下 第九十八周 搜索一·24点
题目1 : 搜索一·24点
描述
周末,小Hi和小Ho都在家待着。
在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。
小Ho:玩点什么好呢?
小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。
小Ho:好啊,好啊。
<经过若干局游戏之后>
小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?
小Hi:让我想想。
<过了几分钟>
小Hi:我知道了!其实很简单嘛。
输入
第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解题思路
数据量不大,所以可以直接暴力枚举,4个数字,3个操作运算符,4个数字共有4!=24中可能,3个操作符共有4^3 共64种,因为有多种优先级次序,一次枚举。
(A#B)#(C#D)
((A#B)#C)#D
A#(B#(C#D))
(A#(B#C))#D
A#((B#C)#D)代码:
#include<iostream> using namespace std; double number[];
double nowNumber[];
char ops[];
char opType[] = { '+', '-', '*', '/' };
bool used[]={false};
int num; double calc(double a, double b, char c){
double s = 0.0;
switch (c)
{
case '+': s = a + b;break;
case '-': s = a - b;break;
case '*': s = a*b;break;
case '/': if (b != ) s = b / a;break;
default: break;
}
return s;
} bool makeOperation(int depth){
if(depth>=){
if ( calc(calc(number[], number[],ops[]), calc(number[], number[],ops[]),ops[]) == //(A#B)#(C#D)
|| calc(calc(calc(number[],number[],ops[]),number[],ops[]),number[],ops[]) == //((A#B)#C)#D
|| calc(number[], calc(number[], calc(number[], number[], ops[]), ops[]), ops[]) == //A#(B#(C#D))
|| calc(calc(number[], calc(number[], number[], ops[]), ops[]), number[], ops[]) == //(A#(B#C))#D
|| calc(number[], calc(calc(number[], number[], ops[]), number[], ops[]), ops[]) == //A#((B#C)#D)
) return true;
else
return false;
} for(int i=;i<;i++){
ops[depth] = opType[i];
if (makeOperation(depth + ))
return true;
}
return false;
} bool makeNumber(int depth){
if(depth>=)
return makeOperation(); for(int i=;i<;i++){
if(!used[i]){
nowNumber[depth]=number[i];
used[i]=false; if(makeNumber(depth+))
return true; used[i]=false;
}
}
return false;
} int main(){
int n;
cin>>n; while(n--){
for (int i = ; i < ; i++)
cin >> number[i]; if (makeNumber())
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return ;
}题解中给的思路是,引入“反-”和“反/”,运算符增加2种,优先级结合次序可以减少3中,效率更优。
hiho一下 第九十八周 搜索一·24点的更多相关文章
- hihocoder 九十八周 搜索一 24点
题目1 : 搜索一·24点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 周末,小Hi和小Ho都在家待着. 在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副 ...
- hiho一下 第九十五周 数论四·扩展欧几里德
题目 : 数论四·扩展欧几里德 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho周末在公园溜达.公园有一堆围成环形的石板,小Hi和小Ho分别站在不同的石板上 ...
- hiho一下 第九十六周 数论五·欧拉函数
题目1 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定 ...
- 达拉草201771010105《面向对象程序设计(java)》第十八周学习总结
达拉草201771010105<面向对象程序设计(java)>第十八周学习总结 实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构 ...
- 201771010126 王燕《面向对象程序设计(java)》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 马昕璐 201771010118《面向对象程序设计(java)》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验理论知识 (1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别. 第二个关键词:class表明java程序中 ...
- 第十八周java实验作业
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 王颖奇 201771010129《面向对象程序设计Java》第十八周实验总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
随机推荐
- OpenGLES 2.0 可编程渲染管线
OpenGL ES 2.0 与 OpenGL ES 1.x 渲染管线的最大区别就是: 顶点着色器.片元着色器是可编程的,替代了原来的固定管线的很多功能.
- C#基础知识系列六(静态类和静态类成员)
静态类 静态类与非静态类基本相同,但存在一个区别:静态类不能实例化. 也就是说,不能使用 new 关键字创建静态类类型的变量. 因为没有实例变量,所以要使用类名本身访问静态类的成员. 例如,如果名为 ...
- 图解NodeJS【基于事件、回调的单线程高性能服务器】原理
刚开始了解Node感觉很吊,各种说高性能,可是一直不理解为什么单线程会比多线程快?为什么异步IO比非阻塞IO快?因此,本篇在阅读相关书籍后,根据自己的理解,整理此文,如有错误,仅代表理论不精,必当修改 ...
- Android音乐播放器的开发实例
本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的 ...
- jstl标签用法
bean的uri的路径 bean标签是属于struts中的标签,使用要在 Struts 1.3 Libraries中 struts-taglib-1.3.8.jar 中META-INFtld ...
- JSON.NET 简单的使用
JSON.NET(http://json.codeplex.com/)使用来将.NET中的对象转换为JSON字符串(序列化?),或者将JSON字符串转换为.NET中已有类型的对象(反序列化?) 首先为 ...
- MVC学习Day01
~~~~ =============================================================================================== ...
- shiro 与 web 的结合
本次使用的jar包为 shiro-core-.jar shiro-web-.jar 从Shiro 1.2开始引入了Environment/WebEnvironment的概念,即由它们的实现提供相应的S ...
- Codeforces 556D Restructuring Company
传送门 D. Restructuring Company time limit per test 2 seconds memory limit per test 256 megabytes input ...
- tmux 快捷键
ctrl+b , 修改窗口名称 ctrl+b ' 快速按名字切换窗口 ctrl+b w 列出窗口列表 Ctrl+b 激活控制台:此时以下按键生效 系统操作 ? 列出所有快捷键:按q返回 d 脱离当前会 ...