##24点游戏程序实现算法(文末源代码)
##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点游戏程序实现算法(文末源代码)相关推荐
- Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】
Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 [文末源码] 前言 一,效果展示 二,场景搭建 三,代码逻辑 四,完善场景 五,使用小结 前言 还在看别人的寻路逻辑?保姆级教程,一步步教 ...
- 24点游戏java_使用java编写计算24点游戏程序
初学java,编写了一个计算24点的程序,时间有限,有些粗糙,不过可以使用. //-------------Cal24.java--------------- //计算24点程序 //作者:徒步天下( ...
- 24点c语言程序,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- c语言二十四点游戏,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- 24点游戏c语言去除重复,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- c语言24点游戏流程图,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- c语言24游戏程序,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- 24点游戏c语言源代码6,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- c语言简单的24点游戏,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
- c语言fun函数yx,C语言解24点游戏程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...
最新文章
- 指针05 - 零基础入门学习C语言45
- matlab整定串级pid,PID算法在Matlab串级控制中的应用
- php文章远程图片,php保存远程图片到本地 php正则匹配文章中的远程图片地址
- UA OPTI512R 傅立叶光学导论 采样定理例题
- Flask-hello程序
- 网易青果后端系统设计窥探(二)
- 在spring boot中集成Swagger
- 详解C++中的函数调用和下标以及成员访问运算符的重载
- vue新增属性是否会响应式更新?
- 相机标定基础【1】- 在Visual Station 2019 上搭建OpenCV应用 (1)- 安装配置VS
- 分享一本Swift好书
- 为什么要用Redis?
- 阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中
- 剑指 Offer 06. 从尾到头打印链表-力扣
- python控制mt4自动交易软件排名_股票自动交易软件排名
- POJ 3294 Life Forms
- session timer(一)
- 【HeadFirst】设计模式
- python输入税前工资打印税后工资-python-计算个人所得税
- layui数据表格实现快捷键切换编辑单元格
热门文章
- Google账号登录后直接跳转百度首页,登陆不上
- Hi,欢迎大家来到阿毛小猪的博客,分享自己学习中的经验,默默的前行,聆听心的声音...
- vue+croppr.js 裁剪圆形图片
- Jenkins的分布式构建及部署(master~slaver)
- Qt5示例addressBook源码解析
- JS特效一:图片轮播图(JS必须掌握的特效)
- C++STL算法equal(15)
- 如何使用命令行从图像中提取文本
- html网页早发白帝城,唐.李白《早发白帝城》(快乐写字)
- 计算机显示错误屏幕,如何解决显示器分辨率错误