题目:给出4个1~13的数字,求出是否可以根据加减乘除得到24点

代码:

#include <iostream>#include <vector>
using namespace std;/*创建算法模板*/
int cal_msk_4[6][4] = { 1, 1, 0, 0,1, 0, 1, 0,1, 0, 0, 1,0, 1, 1, 0,0, 1, 0, 1,0, 0, 1, 1};int cal_msk_3[3][3] = { 1, 1, 0,1, 0, 1,0, 1, 1};int cal_msk_2[1][2] = {1,1};/*递归判断是否可以计算24点*/
bool check24Points(vector<int> inputValue)
{/*递归出口条件,当仅剩最后一个数,且为24时,则OK*/if (inputValue.size() == 1){if (inputValue[0] == 24){return true;}else{return false;}}/*nextValue为下次递归的输入*/vector<int> nextValue;/*calValue为当前递归需要计算的两个数*/int calValue[2];/*cal_msk根据当前inputValue个数获取模板*/int* cal_msk;/*获取组合个数和模板*/unsigned int combineSum;switch (inputValue.size()){case 4:combineSum = 6;cal_msk = &cal_msk_4[0][0];break;case 3:combineSum = 3;cal_msk = &cal_msk_3[0][0];break;case 2:combineSum = 1;cal_msk = &cal_msk_2[0][0];break;default:combineSum = 0;break;}for (unsigned int i = 0; i < combineSum; i++){/*首先获取当前组合的nextValue和calValue*/nextValue.clear();calValue[0] = 0;calValue[1] = 0;unsigned int index = 0;for (unsigned int j = 0; j < inputValue.size(); j++){if (cal_msk[i * inputValue.size() + j] == 0){nextValue.push_back(inputValue[j]);}else{calValue[index] = inputValue[j];index++;}}/*根据calValue的计算方式进行下一次递归*/int result = 0;/*1.两数相加*/result = calValue[0] + calValue[1];nextValue.push_back(result);if (check24Points(nextValue)){//cout << calValue[0] << " + " << calValue[1] << endl;return true;}nextValue.pop_back();/*2.两数相减*/result = calValue[0] - calValue[1];nextValue.push_back(result);if (check24Points(nextValue)){//cout << calValue[0] << " - " << calValue[1] << endl;return true;}nextValue.pop_back();result = calValue[1] - calValue[0];nextValue.push_back(result);if (check24Points(nextValue)){//cout << calValue[1] << " - " << calValue[0] << endl;return true;}nextValue.pop_back();/*3.两数相乘*/result = calValue[0] * calValue[1];nextValue.push_back(result);if (check24Points(nextValue)){//cout << calValue[0] << " * " << calValue[1] << endl;return true;}nextValue.pop_back();/*4.两数相除*/if ((calValue[1]!= 0) && ((calValue[0]%calValue[1]) == 0)){result = calValue[0] / calValue[1];nextValue.push_back(result);if (check24Points(nextValue)){//cout << calValue[0] << " / " << calValue[1] << endl;return true;}nextValue.pop_back();}if ((calValue[0]!=0) && ((calValue[1]%calValue[0]) == 0)){result = calValue[1] / calValue[0];nextValue.push_back(result);if (check24Points(nextValue)){//cout << calValue[1] << " / " << calValue[0] << endl;return true;}nextValue.pop_back();}}/*遍历所有情况,无法计算24点*/return false;
}bool Game24Points(int a, int b, int c, int d)
{//cout << endl;//TODO: Add codes here ...vector<int> inputValue;inputValue.push_back(a);inputValue.push_back(b);inputValue.push_back(c);inputValue.push_back(d);return check24Points(inputValue);
}

C++递归实现24点游戏相关推荐

  1. 24点游戏的递归解法和Python实现

    24点游戏的递归解法和Python实现 目录 24点游戏的递归解法和Python实现 什么是24点游戏 递归思路 递归 24点问题的递归思路 Python代码实现 四则运算下无解的组合 总结 什么是2 ...

  2. 1.16 24点游戏

    24点游戏的解决办法,也是采取穷举法的思路,4个数,有4!=24中排列的方法,然后3个操作符号,有4×4×4 = 64种结果,再加上括号,有5种结果,于是,每4个数有24*66*5 = 7680中结果 ...

  3. 用python代替人脑运算24点游戏

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  4. cdoj 1252 24点游戏 dfs

    24点游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1252 Descr ...

  5. 24点游戏c语言程序代码,C语言实现24点游戏源代码

    本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下 将算法实现改成C语言,并可在linux服务器上运行.同时修改为可显示所有结果. 注:如果传参重复,如4,4,7,7这样,会 ...

  6. 力扣679.24点游戏

    24点游戏 描述: 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 分析: 题目意思就是求24点,但是直接说很抽象,这里举[4, 1, 8, ...

  7. python经典程序-python经典趣味24点游戏程序设计

    一.游戏玩法介绍: 24点游戏是儿时玩的主要益智类游戏之一,玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24.例如,2,3,4,6,通过( ( ( 4 + 6 ) - ...

  8. 24点游戏 计算机编程,关于24点游戏的编程思路与基本算法

    24点游戏的算法,其中最主要的思想就是穷举法.所谓穷举法就是列出4个数字加减乘除的各种可能性,包括括号的算法.我们可以将表达式分成以下几种:首先我们将4个数设为a,b,c,d,,其中算术符号有+,-, ...

  9. 24点游戏---java编写

    24点游戏 前言 1. 算法分析  1 .1 接收玩家结果输入与结果判定.  1.2 工具类TimeUtils.CardUtils.  1.3 数据生成与结果计算. 2. 概要设计 2.1 结构设计 ...

最新文章

  1. Kotlin implements 的实现
  2. 重构alert,confirm
  3. MATLAB常用数学函数
  4. win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...
  5. 『TensorFlow』模型保存和载入方法汇总
  6. 佳能c3320怎么设置接收方_入门级单反相机佳能800D是否值得买?在我看来价格决定一切...
  7. LVS+Keepalive+Nginx实现负载均衡
  8. Android Camera 运行流程
  9. C++中const与指针、引用的分析(转自china_unix GP-King)
  10. 【历史】衣米魔兽怀旧服发展历史事件以及衣米魔兽重要玩家传记
  11. python广州地图_广东省客户数量地图展示,如何通过python实现?
  12. 机载激光雷达原理与应用科普(一)
  13. win10:如何书写.reg文件修改注册表
  14. 百度网盘/U盘,上传文件时提示超过4G限制如何解决
  15. 等差数列_等比数列公式
  16. MySQL中的子查询用法
  17. 树莓派CM4和CM4IO上手
  18. mysql error 1534_如何解決mysqlimport: Error: 13, Can”t get stat of 的問題 | 學步園
  19. Evil.js代码杀手
  20. knex mysql 操作_手把手教你用express + mysql + knex 做个 todoList

热门文章

  1. JPA H2内存数据库 demo
  2. Netty序列化协议Protocol buff
  3. centos7 LNMP环境搭建
  4. 中春出租车计价器检定系统 钱龙软件
  5. 国密SSL加密证书获取流程
  6. 定时任务(工作有用)
  7. vscode快捷键pycharm快捷键
  8. 2022虎年新UI春节送祝福微信小程序源码下载支持多种流量主
  9. java netty教程_Netty学习教程之基础使用篇
  10. cookie和session的详细讲解