HDU 1427 24点游戏
来源:互联网 发布:c语言中进制转换 编辑:程序博客网 时间:2024/06/05 16:35
题目:
Description
速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。
Input
每组输入数据占一行,给定四张牌。
Output
每一组输入数据对应一行输出。如果有解则输出"Yes",无解则输出"No"。
Sample Input
A 2 3 63 3 8 8
Sample Output
YesNo
实际上只有水平比较高的24点玩家才会算出这种结果,比如(3+3/7)*7,或者(5-1/5)*5
这个题目忽略这种现象,把它们判定为无解,让搜索高效了一些,而且不需要涉及到实数的问题,不过写代码就多了一些判断。
主要的思路就是函数的嵌套。
这个题目我是只用一个字符ch记录所有输入的,空格会自动忽略,0我就人为忽略,遇到0就读取下一个字符,这样,A就是表示1,1就是表示10
代码:
#include<iostream>using namespace std;int number(char c){if (c == 'A')return 1;if (c == 'J')return 11;if (c == 'Q')return 12;if (c == 'K')return 13;if (c == '1')return 10;return c - '0';}bool ok(int a, int b){if (a + b == 24)return true;if (a - b == 24)return true;if (a*b == 24)return true;if (a != 0 && a == 24 * b)return true;return false;}bool ok(int a, int b, int c){if (b == 0){if (ok(a, c))return true;return false;}if (c == 0){if (ok(a, b))return true;return false;}if (ok((a + b), c) || ok((a - b), c) || ok((a * b), c))return true;if (a%b == 0 && ok(a / b, c))return true;if (ok(a, b + c) || ok(a, b - c) || ok(a, b * c))return true;if (b%c == 0 && ok(a, b / c))return true;return false;}bool ok(int a, int b, int c, int d){if (ok(a + b, c, d) || ok(a - b, c, d) || ok(a * b, c, d))return true;if (a%b == 0 && ok(a / b, c, d))return true;if (ok(a, b + c, d) || ok(a, b - c, d) || ok(a, b * c, d))return true;if (b%c == 0 && ok(a, b / c, d))return true;if (ok(a, b, c + d) || ok(a, b, c - d) || ok(a, b, c * d))return true;if (c%d == 0 && ok(a, b, c / d))return true;return false;}bool ok1(int a, int b, int c, int d){if (ok(a, b, c, d) || ok(a, c, b, d) || ok(b, a, c, d) || ok(b, c, a, d) || ok(c, a, b, d) || ok(c, b, a, d))return true;return false;}int main(){char ch;int a, b, c, d;while (cin >> ch){if (ch == '0')cin >> ch;a = number(ch);cin >> ch;if (ch == '0')cin >> ch;b = number(ch);cin >> ch;if (ch == '0')cin >> ch;c = number(ch);cin >> ch;if (ch == '0')cin >> ch;d = number(ch);if (ok1(a, b, c, d)||ok1(b,c,d,a)||ok1(c,d,a,b)||ok1(d,a,b,c))cout << "Yes" << endl;else cout << "No" << endl;}return 0;}
2 0
- HDU 1427 24点游戏
- hdoj 1427 24点游戏
- HDU-1427-速算24点
- HDU 1427 速算24点
- HDU:1427 速算24点
- HDU-1427 速算24点
- hdu 1427 速算24点
- hdu 1427 速算24点
- HDU 1427 速算24点
- hdu 1427 速算24点
- HDU 1427 速算24点
- HDU 1427 - 速算24点
- 24点游戏代码
- 24点游戏
- 24点扑克牌游戏
- 24点游戏
- 24点游戏
- 《24点游戏》
- 学习决策树算法
- 七牛云直播-Android端播放卡顿问题处理
- inno setup 打包相关技术要点
- ubuntu引导问题
- iOS 第三方框架管理cocoapods 关于Mac 10.11 系统升级无法使用的问题
- HDU 1427 24点游戏
- ios移动开发的提示弹出框(简单明了方便调试)
- HTML5基础[1]
- android开发中项目没有生成R.java
- C# Process.Start()方法详解
- docker默认设置下访问私有docker hub遇到的https问题
- position 定位
- ORA-01861: 文字与格式字符串不匹配
- CTeX 中文 article 模板