##24点游戏程序实现算法(文末源代码)
题目要求:
24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
提高要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
1. 程序风格良好(使用自定义注释模板)
2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
3.所有成绩均可记录在TopList.txt文件中。
2.算法分析
算法设计思路
算法描述:
1.通过rand()函数生成4个随机数
2.通过F()函数来进行递归调用
3.首先将数组A中的两个数进行运算,得到结果,然后通过递归调用将结果与下一个数字运算,得到结果再通过递归调用,与最后一个数进行运算
4.递归过程中,判断是否(n==1&&A[0]==24),满足条件则输出结果。最后通过count最终知道有多少种解法
3.概要设计(包括数据结构及算法绘制流程图或伪代码表示)
通过递归调用实现结果与下一个进行运算
从数组中任意取出两个数的组合
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
double a,b;
string x,y;
a=A[i];
b=A[j];
A[j]=A[n-1]; //将最后一位数赋给A[j]
x=B[i];
y=B[j];
B[j]=B[n-1]; //最后一位数字放入B[j]中

设计编写四种运算方式:
//加法
A[i]=a+b; //第一个空间保存前两个数的运算结果
B[i]=’(’+x+’+’+y+’)’; //将运算结果存入数组B中
F(n-1);

//减法
//考虑两种情况:1. a-b 2. b-a
A[i]=a-b;
B[i]=’(’+x+’-’+y+’)’;
F(n-1);
A[i]=b-a;
B[i]=’(’+y+’-’+x+’)’;
F(n-1);

//乘法
A[i]=ab;
B[i]=’(’+x+’
’+y+’)’;
F(n-1);

//除法
//考虑两种情况:1. a/b 2. b/a 同时需要判断分母不为零
if(b!=0){
A[i]=a/b;
B[i]=’(’+x+’/’+y+’)’;
F(n-1);
}

if(a!=0){
A[i]=b/a;
B[i]=’(’+y+’/’+x+’)’;
F(n-1);
}

流程图如下:

4.测试(设计测试用例或测试代码的设计与实现,测试结果截屏)
测试实现结果如下,随机生成四个数12,3,13,11计算之后不可以得出24点

随机生成的四个数6,3,9,12竟然有86种解法

5.调试(对测试出的问题进行调试,界面截屏,调试修正编码)

6.心得体会(关键问题的解决思路及步骤总结)
不足:此次实验只完成了基本要求,没有实现提高要求,后面我会努力解决这个问题。
心得:通过此次作业,再次复习了随机数的生成,srand()和rand()的搭配使用。刚开始想要生成随机数只写了rand()函数,没有写srand()函数,结果每次运行生成的随机数都是固定的,加上srand()函数后,每次生成的随机数才是随机的,同时也练习了switch语句和case语句的搭配使用,for循环,函数的调用等等知识点。

#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<ctime>
using namespace std;int n=4;
double A[4]={0}; //存储4个数字
char oper[4]={'+','-','*','/'};
string B[4];
int count=0;
int F(int n){ if(n==1){if(A[0]==24) //判断结果是否为24 { cout<<B[0]<<endl;count++;} }for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){double a,b;string x,y;a=A[i];b=A[j];A[j]=A[n-1]; //将最后一位数赋给A[j]  x=B[i];y=B[j];B[j]=B[n-1]; //最后一位数字放入B[j]中 //加法 A[i]=a+b; B[i]='('+x+'+'+y+')'; //将运算结果存入数组B中 F(n-1);//减法//考虑两种情况:1. a-b 2. b-a A[i]=a-b;B[i]='('+x+'-'+y+')';F(n-1);A[i]=b-a;B[i]='('+y+'-'+x+')';F(n-1);//乘法 A[i]=a*b;B[i]='('+x+'*'+y+')';F(n-1);//除法//考虑两种情况:1. a/b 2. b/a 同时需要判断分母不为零 if(b!=0){A[i]=a/b;B[i]='('+x+'/'+y+')';F(n-1);}if(a!=0){A[i]=b/a;B[i]='('+y+'/'+x+')';F(n-1);}//当以上四则运算的结果都不能满足条件时//进入下一个for循环之前, 需要将之前的i和j上的值都找回,即赋值 A[i]=a;A[j]=b;B[i]=x;B[j]=y;}}
}class RandNum{public:RandNum(){srand(time(0));}double get(int begin = 0, int end = 1){return rand()%(end-begin+1)+begin;}
}; int main(void)
{RandNum r;for (int i = 0; i < 4; i++) { //生成4个1~13之间的数字 A[i]=r.get(1,13);  //将生成的数字存入数组A中 cout<<A[i]<<" "; }cout<<endl;for(int i=0;i<4;i++){if(A[i]==1) B[i]='A';else if(A[i]==10) B[i]="10"; else if(A[i]==11) B[i]='J';else if(A[i]==12) B[i]='Q';else if(A[i]==13) B[i]='K';else B[i]='0'+A[i];} F(n);cout<<endl<<"这四个数字总共有 "<<count<<" 种解法"<<endl; return 0;
}

##24点游戏程序实现算法(文末源代码)相关推荐

  1. Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

    Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 [文末源码] 前言 一,效果展示 二,场景搭建 三,代码逻辑 四,完善场景 五,使用小结 前言 还在看别人的寻路逻辑?保姆级教程,一步步教 ...

  2. 24点游戏java_使用java编写计算24点游戏程序

    初学java,编写了一个计算24点的程序,时间有限,有些粗糙,不过可以使用. //-------------Cal24.java--------------- //计算24点程序 //作者:徒步天下( ...

  3. 24点c语言程序,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  4. c语言二十四点游戏,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  5. 24点游戏c语言去除重复,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  6. c语言24点游戏流程图,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  7. c语言24游戏程序,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  8. 24点游戏c语言源代码6,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  9. c语言简单的24点游戏,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  10. c语言fun函数yx,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

最新文章

  1. 指针05 - 零基础入门学习C语言45
  2. matlab整定串级pid,PID算法在Matlab串级控制中的应用
  3. php文章远程图片,php保存远程图片到本地 php正则匹配文章中的远程图片地址
  4. UA OPTI512R 傅立叶光学导论 采样定理例题
  5. Flask-hello程序
  6. 网易青果后端系统设计窥探(二)
  7. 在spring boot中集成Swagger
  8. 详解C++中的函数调用和下标以及成员访问运算符的重载
  9. vue新增属性是否会响应式更新?
  10. 相机标定基础【1】- 在Visual Station 2019 上搭建OpenCV应用 (1)- 安装配置VS
  11. 分享一本Swift好书
  12. 为什么要用Redis?
  13. 阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中
  14. 剑指 Offer 06. 从尾到头打印链表-力扣
  15. python控制mt4自动交易软件排名_股票自动交易软件排名
  16. POJ 3294 Life Forms
  17. session timer(一)
  18. 【HeadFirst】设计模式
  19. python输入税前工资打印税后工资-python-计算个人所得税
  20. layui数据表格实现快捷键切换编辑单元格

热门文章

  1. Google账号登录后直接跳转百度首页,登陆不上
  2. Hi,欢迎大家来到阿毛小猪的博客,分享自己学习中的经验,默默的前行,聆听心的声音...
  3. vue+croppr.js 裁剪圆形图片
  4. Jenkins的分布式构建及部署(master~slaver)
  5. Qt5示例addressBook源码解析
  6. JS特效一:图片轮播图(JS必须掌握的特效)
  7. C++STL算法equal(15)
  8. 如何使用命令行从图像中提取文本
  9. html网页早发白帝城,唐.李白《早发白帝城》(快乐写字)
  10. 计算机显示错误屏幕,如何解决显示器分辨率错误