24点
2015-07-28 11:16
555 查看
[来自华为OJ]
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利。
输入:4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出:True or False
示例:
输入
7 2 1 10
输出
True
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利。
输入:4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出:True or False
示例:
输入
7 2 1 10
输出
True
#include <iostream> #include <algorithm> using namespace std; int CalcNum(int iNum1, int iNum2, int iNum3, int iNum4, int idx1, int idx2, int idx3) { int iSum = 0; if (idx1 == 0) { iSum = iNum1 + iNum2; } else if (idx1 == 1) { iSum = iNum1 - iNum2; } else if (idx1 == 2) { iSum = iNum1 * iNum2; } else if (idx1 == 3) { iSum = iNum1 / iNum2; } if (idx2 == 0) { iSum += iNum3; } else if (idx2 == 1) { iSum -= iNum3; } else if (idx2 == 2) { iSum *= iNum3; } else if (idx2 == 3) { iSum /= iNum3; } if (idx3 == 0) { iSum += iNum4; } else if (idx3 == 1) { iSum -= iNum4; } else if (idx3 == 2) { iSum *= iNum4; } else if (idx3 == 3) { iSum /= iNum4; } return iSum; } bool Game24Points(int a, int b, int c, int d) { int iNum[4] = {a, b, c, d}; int idx1, idx2, idx3; for (idx1 = 0; idx1 < 4; ++idx1) { for (idx2 = 0; idx2 < 4; ++idx2) { for (idx3 = 0; idx3 < 4; ++idx3) { do { if (CalcNum(iNum[0], iNum[1], iNum[2], iNum[3], idx1, idx2, idx3) == 24) { return true; } } while (next_permutation(iNum, iNum + 4)); } } } return false; } int main(void) { while (1) { int iNum[4] = {0}; for (int i = 0; i < 4; ++i) { cin >> iNum[i]; } if (Game24Points(iNum[0], iNum[1], iNum[2], iNum[3])) { cout << "True" << endl; } else { cout << "False" << endl; } } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- 我是运营,我没有假期
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- 华为路由器密码恢复
- VB实现的《QQ美女找茬游戏》作弊器实例
- 华为交换机的后缀详解
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏