原题链接:24点游戏算法_牛客题霸_牛客网

描述

给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算

此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。

输入描述:

读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。

输出描述:

对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false

思路分析:

在四个数字中,只需要用到三个操作符即可,因此对运算符进行枚举。,每个位置的运算符都有可能是+−∗/+−∗/+−∗/中的一种,总共有4x4x4种可能,枚举所有操作数的顺序和运算符的64种可能,计算当前操作数顺序和运算符顺序下的结果,如果结果为24,则结束枚举,输出运算过程。

运算符的64种顺序枚举用三个for循环实现,cal函数计算当前操作数顺序和运算符的结果。

源码:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<char>op={'+','-','*','/'};
vector<char>operation;//存放当前运算符
double cal(vector<int>num,vector<char>operation);//计算当前顺序的操作数和运算符的结果
bool dfs(int a,int b,int c,int d);
int main()
{vector<int>num(4,0);while(cin>>num[0]>>num[1]>>num[2]>>num[3]){sort(num.begin(),num.end());bool flag=false;char op[3];do{if(dfs(num[0],num[1],num[2],num[3])){cout<<"true"<<endl;flag=true;break;}}while(next_permutation(num.begin(),num.end()));if(!flag){cout<<"false"<<endl;}}return 0;
}double cal(vector<int>num,vector<char>operation)
{double sum=num[0];for(int i=0,j=1;i<operation.size();i++,j++){switch(operation[i]){case '+':sum+=num[j];break;case '-':sum-=num[j];break;case '*':sum *=num[j];break;case '/':sum /=num[j];break;}}return sum;
}
bool dfs(int a,int b,int c,int d)
{vector<int>num={a,b,c,d};for(int i=0;i<op.size();i++)//三个循环枚举所有的操作符顺序可能{for(int j=0;j<op.size();j++){for(int k=0;k<op.size();k++){operation={op[i],op[j],op[k]};//枚举所有可能得运算符顺序double sum=cal(num,operation);//计算结果if(sum==24.0)return true;}}}return false;
}

C++ 24点游戏算法相关推荐

  1. ACM. HJ67 24点游戏算法 679. 24 点游戏

    HJ67 24点游戏算法 ●● 679. 24点游戏 ●●● 描述 给定一个长度为4的整数数组 cards .你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字.您应该使用运算符 ['+ ...

  2. [华为机试练习题]44.24点游戏算法

    题目 注意: 6 + 2 * 4 + 10 = 24 不是一个数字一个数字的计算 代码 /*--------------------------------------- * 日期:2015-07-0 ...

  3. C#:实现24点游戏算法(附完整源码)

    C#:实现24点游戏算法 using System; using System.Collections; using System.Collections.Generic; using System. ...

  4. 华为机试HJ67:24点游戏算法

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个 ...

  5. 华为oj题目c语言,华为OJ机试题目——24点游戏算法

    对于这种题用程序实现只能是穷举的思想,而做法各异,如下代码是利用符号的不断变化,利用4个数计算值,默认是4个数字a,b,c,d是按顺序计算的,即默认是加了括号的,即(((a op1 b)op2 c)o ...

  6. 【python】24点游戏算法

    从 1-13 中随机抽出 4 张牌(不允许重复),任意填入运算符"+ .- .\* ./"(分别表示加.减.乘.除),使得计算的结果为 24. 代码: import random ...

  7. 【华为机试067】24点游戏算法

    题目描述: 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字.[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字] 输出: true or fal ...

  8. python24点计算器_Python实现24点游戏

    24点游戏是一款老少咸宜的益智游戏,游戏的玩法是给出任意四个数字,通过加减乘除四则运算,计算出24. 网上有很多24点游戏算法,找出解法并不难,但是难在如何合适地加括号和去除等价的重复表达式上. 1. ...

  9. 算法训练 24点游戏

    算法训练 24点游戏 1.问题描述 2.输入格式 3.输出格式 4.分析 5.代码 第一版:蓝桥杯版(搜索算法) 后面会出力扣版的24点游戏的代码分析 1.问题描述 问题: 24点游戏是一个非常有意思 ...

最新文章

  1. R语言构建xgboost模型:特征重要度计算及解读、改善特征重要度数据的可解释性、特征重要度可视化
  2. 要让机器人切土豆丝,英伟达首先给土豆建了个模
  3. 9 个技巧,解决 K8s 中的日志输出问题
  4. 肿瘤相关甲基化预后分析数据库SurvivalMeth详细使用指南
  5. react中webpack.config.js配置lessless-loader less
  6. 基于WebSocket的手机应用和浏览器应用的数据传递
  7. java merge css_一句命令快速合并 JS、CSS
  8. android os苹果手机助手,深度系统V20(1003)内测招募:新增手机助手,支持安卓/iOS端...
  9. 机器学习面试之算法思想简单梳理
  10. linux显示防火墙端口命令,Linux查询端口是否被防火墙屏蔽 firewall-cmd命令用法
  11. 拓端tecdat|R语言进行相关矩阵分析及其网络可视化
  12. Android Ptrace Inject
  13. 破解寝室安装老毛子路由器校园网电信闪讯锐捷认证
  14. 在做UDP传输的时候,出现的这个问题,哪个大佬能帮忙看一看啊
  15. fastadmin表格操作
  16. itunes无法安装到win7系统更新服务器失败怎么办啊,Win7系统安装iTunes失败出错无法安装的解决方法...
  17. python制作图表放入excel_python写入excel(xlswriter)--生成图表
  18. shell脚本之国际象棋棋盘
  19. 量子点、量子点发光、量子点屏幕究竟是什么?
  20. 通过纯CSS实现文字前添加图片

热门文章

  1. 为什么你有10年经验,但成不了专家?
  2. mysql 查所有的用户_MySQL查看所有用户 - MySQL 系列教程
  3. mysql如何查看用户及其权限
  4. Python基础教程之变量
  5. Docker容器网卡eth0@ifx浅析
  6. css常用(2):毛玻璃 、模糊滤镜
  7. 解决python和window7版本不兼容问题
  8. 工作金钥匙——统筹方法
  9. 三服务 | 浙江省委信息化管理中心领导参观走访世平信息
  10. 利用phpstudy搭建thinkphp