C++ 24点游戏算法
原题链接: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点游戏算法相关推荐
- ACM. HJ67 24点游戏算法 679. 24 点游戏
HJ67 24点游戏算法 ●● 679. 24点游戏 ●●● 描述 给定一个长度为4的整数数组 cards .你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字.您应该使用运算符 ['+ ...
- [华为机试练习题]44.24点游戏算法
题目 注意: 6 + 2 * 4 + 10 = 24 不是一个数字一个数字的计算 代码 /*--------------------------------------- * 日期:2015-07-0 ...
- C#:实现24点游戏算法(附完整源码)
C#:实现24点游戏算法 using System; using System.Collections; using System.Collections.Generic; using System. ...
- 华为机试HJ67:24点游戏算法
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个 ...
- 华为oj题目c语言,华为OJ机试题目——24点游戏算法
对于这种题用程序实现只能是穷举的思想,而做法各异,如下代码是利用符号的不断变化,利用4个数计算值,默认是4个数字a,b,c,d是按顺序计算的,即默认是加了括号的,即(((a op1 b)op2 c)o ...
- 【python】24点游戏算法
从 1-13 中随机抽出 4 张牌(不允许重复),任意填入运算符"+ .- .\* ./"(分别表示加.减.乘.除),使得计算的结果为 24. 代码: import random ...
- 【华为机试067】24点游戏算法
题目描述: 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字.[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字] 输出: true or fal ...
- python24点计算器_Python实现24点游戏
24点游戏是一款老少咸宜的益智游戏,游戏的玩法是给出任意四个数字,通过加减乘除四则运算,计算出24. 网上有很多24点游戏算法,找出解法并不难,但是难在如何合适地加括号和去除等价的重复表达式上. 1. ...
- 算法训练 24点游戏
算法训练 24点游戏 1.问题描述 2.输入格式 3.输出格式 4.分析 5.代码 第一版:蓝桥杯版(搜索算法) 后面会出力扣版的24点游戏的代码分析 1.问题描述 问题: 24点游戏是一个非常有意思 ...
最新文章
- R语言构建xgboost模型:特征重要度计算及解读、改善特征重要度数据的可解释性、特征重要度可视化
- 要让机器人切土豆丝,英伟达首先给土豆建了个模
- 9 个技巧,解决 K8s 中的日志输出问题
- 肿瘤相关甲基化预后分析数据库SurvivalMeth详细使用指南
- react中webpack.config.js配置lessless-loader less
- 基于WebSocket的手机应用和浏览器应用的数据传递
- java merge css_一句命令快速合并 JS、CSS
- android os苹果手机助手,深度系统V20(1003)内测招募:新增手机助手,支持安卓/iOS端...
- 机器学习面试之算法思想简单梳理
- linux显示防火墙端口命令,Linux查询端口是否被防火墙屏蔽 firewall-cmd命令用法
- 拓端tecdat|R语言进行相关矩阵分析及其网络可视化
- Android Ptrace Inject
- 破解寝室安装老毛子路由器校园网电信闪讯锐捷认证
- 在做UDP传输的时候,出现的这个问题,哪个大佬能帮忙看一看啊
- fastadmin表格操作
- itunes无法安装到win7系统更新服务器失败怎么办啊,Win7系统安装iTunes失败出错无法安装的解决方法...
- python制作图表放入excel_python写入excel(xlswriter)--生成图表
- shell脚本之国际象棋棋盘
- 量子点、量子点发光、量子点屏幕究竟是什么?
- 通过纯CSS实现文字前添加图片