1. 题目描述

计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ),  除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王:

3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER

本程序要求实现:输入 4 张牌,输出一个算式,算式的结果为 24 点。

详细说明:

1. 运算只考虑加减乘除运算,没有阶乘等特殊运算符号, 友情提醒,整数除法要当心 ;

2. 牌面 2~10 对应的权值为 2~10, J 、 Q 、 K 、 A 权值分别为为 11 、 12 、 13 、 1 ;

3. 输入 4 张牌为字符串形式,以 一个空格 隔开,首尾无空格;如果输入的 4 张牌中包含大小王,则输出字符串“ ERROR ”,表示无法运算;

4. 输出的算式格式为 4 张牌通过 +-*/ 四个运算符相连, 中间无空格 , 4 张牌出现顺序任意,只要结果正确;

5. 输出算式的运算顺序从左至右,不包含括号 ,如 1+2+3*4 的结果为 24

6. 如果存在多种算式都能计算得出 24 ,只需输出一种即可,如果无法得出 24 ,则输出“ NONE ”表示无解。

2. 输入描述:

输入4张牌为字符串形式,以一个空格隔开,首尾无空格;

3. 输出描述:

如果输入的4张牌中包含大小王,则输出字符串“ERROR”,表示无法运算;

4. 代码:

思想:穷举法

#include <iostream>
#include <string>
//#include <vector>
#include <algorithm>
using namespace std;string in[4];
int data[5];
char alg[4]={'+','-','*','/'};//四则运算
int flag=0;
bool isOk()
{for(int i=0;i<4;i++){if(in[i]=="JOKER"||in[i]=="Joker"){return false;}}return true;
}//权重转换
int trans(string s)
{int n;char c=s[0];if(c!='J'&&c!='Q'&&c!='K'&&c!='A')n=c-'0';else if(c=='J')n=11;else if(c=='Q')n=12;else if(c=='K')n=13;elsen=1;return n;
}int yunsuan2(int &x1,int x2,int index)//二则运算
{switch(alg[index]){case '+':return x1+x2;break;case '-':return x1-x2;break;case '*':return x1*x2;break;case '/':{if(x2!=0&&x1%x2==0)return x1/x2;else return -100;break;} default:return -200;}
}void pro(int a1,int a2,int a3,int a4)//计算,数据顺序
{for(int i=0;i<4;i++){    int sum=0;//临时变量if(flag==1)break;else{           sum=yunsuan2(data[a1],data[a2],i);int tmp=sum;//临时变量for(int j=0;j<4;j++){if(flag==1)break;else{sum=yunsuan2(sum,data[a3],j);int tp=sum;//临时变量,防止后面被改变for(int k=0;k<4;k++){sum=yunsuan2(tp,data[a4],k);if(sum==24&&flag==0){cout<<in[a1-1]<<alg[i]<<in[a2-1]<<alg[j]<<in[a3-1]<<alg[k]<<in[a4-1]<<endl;flag=1;break;}sum=tp;}            }sum=tmp;}sum=tmp;//临时变量}sum=0;}}int main()
{while(cin>>in[0]>>in[1]>>in[2]>>in[3]){if(isOk()){//先计算权重data[0]=0;for(int i=0;i<4;i++)data[i+1]=trans(in[i]);//sort(data.begin(),data.end());//计算24点flag=0;pro(1,2,3,4);if(flag==0)pro(1,2,4,3);if(flag==0)pro(1,3,2,4);if(flag==0)pro(1,3,4,2);if(flag==0)pro(1,4,2,3);if(flag==0)pro(1,4,3,2);if(flag==0)pro(2,1,3,4);if(flag==0)pro(2,1,4,3);if(flag==0)pro(2,3,1,4);if(flag==0)pro(2,3,4,1);if(flag==0)pro(2,4,3,1);if(flag==0)pro(2,4,1,3);if(flag==0)pro(3,1,2,4);if(flag==0)pro(3,1,4,2);if(flag==0)pro(3,2,4,1);if(flag==0)pro(3,2,1,4);if(flag==0)pro(3,4,1,2);if(flag==0)pro(3,4,2,1);if(flag==0)pro(4,1,3,2);if(flag==0)pro(4,1,2,3);if(flag==0)pro(4,2,1,3);if(flag==0)pro(4,2,3,1);if(flag==0)pro(4,3,2,1);if(flag==0)pro(4,3,1,2);if(flag==0)cout<<"NONE"<<endl;}elsecout<<"ERROR"<<endl;flag=0;}return 0;
}

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

  1. php 24点算法,PHP实现简单的24点游戏

    忽然想到做一个小应用,需要使用到24点判断,故而写一个简单版的. 代码粗糙,轻拍. /** * 24点游戏 * @author 长安猎人 */ $arr = [10, 4, 5, 3]; $opArr ...

  2. 【c#】24点游戏的实现(可存档且局域网互联)

    (更新,附上此款游戏的源代码供大家学习吧!http://download.csdn.net/detail/gshengod/5774531) lz辛苦考上了北邮的研究生,刚进入实验室,就接到了一个棘手 ...

  3. Java黑皮书课后题第3章:**3.24(游戏:抽牌)编写程序,模拟从一副52张的牌中抽一张牌,程序应显示牌的大小、花色

    **3.24(游戏:抽牌)编写程序,模拟从一副52张的牌中抽一张牌,程序应显示牌的大小.花色 题目 题目概述 运行示例 破题 代码 题目 题目概述 **3.24(游戏:抽牌)编写程序,模拟从一副52张 ...

  4. python游戏开发步骤_详解Python GUI版24点游戏制作过程

    本文作者为浙江温州永嘉县教师发展中心应根球老师,电子邮箱:ycicada@163.com. 传统用扑克牌算24点游戏用于小学低中段学生训练四则运算效果不错,也可用于防止老年痴呆.本项目模拟传统扑克24 ...

  5. 用matlab算24点小游戏,24点游戏的Matlab程序

    function GUI_games24 S.fh = figure('units','pixels',... 'position',[500 500 800 200],... 'menubar',' ...

  6. 基于android平台的24点游戏设计与实现需求分析,基于Android平台的24点游戏设计与实现需求分析_毕业设计论文.doc...

    基于Android平台的24点游戏设计与实现 摘要 随着移动设备的普及以及移动设备的硬件的提升,移动设备的功能越来越完善,移动设备的系统平台也日渐火热起来.目前国内最常见的移动开发平台有Symbian ...

  7. 1.16 24点游戏

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

  8. 24点游戏详细截图介绍以及原型、Alpha、Beta对比

    原型设计 图片展示 功能与界面设计 1.登录注册 2.手机号验证 3.24点游戏 4.粉色系女生界面 Alpha 图片展示 功能与界面设计 1.24点游戏 2.背景音乐 3.可查看多种可能的答案 4. ...

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

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

  10. cdoj 1252 24点游戏 dfs

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

最新文章

  1. Maximum execution time of 30 seconds exceeded解决办法
  2. 通过分析 JDK 源代码研究 Hash 存储机制
  3. C++友元函数访问私有成员
  4. c++ 类中静态变量 static
  5. 从5随机到7随机及其扩展
  6. linux网络编程之字节序
  7. Stream流的基本使用方法
  8. linux和windows的进程的虚拟地址空间
  9. 经典面试题(30):以下代码将输出的结果是什么?
  10. NYOJ277 - 车牌号
  11. 从 Chrome 谈到 Adobe
  12. 【白话模型量化系列一】矩阵乘法量化
  13. Mysql表的约束设计和关联关系设计
  14. app国际化多语言strings.xml 与 Excel 互相转换的工具,支持iOS和Android
  15. 吉大java是选修课么,吉大校园网客户端 Java 版
  16. python爬虫框架论文开题报告范文_研究思路及框架--开题报告
  17. video 播放视频被x5内核浏览器劫持时的处理记录
  18. STM32F103定时器详解
  19. vue + prerender + html-webpack-plugin 打包商桥项目报错
  20. 多图详解:如何不停服分库分表

热门文章

  1. 机械设计二级减速器设计
  2. 基于STM32F103C8T6 HAL库 TM7705数据读取
  3. Win10鼠标右键菜单不显示怎么办?
  4. Kali扫描工具Nmap
  5. 机器学习笔记——生成式对抗网络GAN
  6. CuteFTP实用技巧
  7. 数据恢复基础和进阶教程(二)
  8. 用jquery1.9版本判断ie浏览器及ie6浏览器
  9. 概率论 方差公式_2020考研数学:概率论各章节知识点梳理
  10. 金蝶K3系统中间层群集部署方案