计算24点 数据结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

课程设计任务书 -------------------------1 =

课程设计任务书

学生姓名:赵旭林专业班级:计算机科学与技术0801 指导教师:杨克工作单位:计算机科学系

题目: 计算24点

初始条件:

有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,

能否在进行加、减、乘、除运算后,其运算结果等于24。其中J按11计算,Q按12计算,K按13计

算,A按1计算。

(1)能接受用户输入的4张牌点,并进行24点判断,并输出判定结果。

(2)若能得到结果24,要求输出至少一个可得到该结果的计算表达式。

例如,对给定的2,7,J,Q,按下述方法计算可得到结果24:

(J-7)*(Q/2) 或 Q*(J-2-7)

(3)若不能得到24点,亦应输出提示。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:

1. 问题描述

简述题目要解决的问题是什么。

2. 设计

存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;

3. 调试报告

调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。

4. 经验和体会(包括对算法改进的设想)

5. 附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这

些测试数据和运行输出。

说明:

1. 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。

2. 凡拷贝往届任务书或课程设计充数者,成绩一律无效,以0分记。

时间安排:

1、第18周完成。

2、7月2日8:30时到实验中心检查程序、交课程设计报告、源程序(U盘)。

指导教师签名: 2010年月日

系主任(或责任教师)签名: 2010年月日

数据结构课程设计正文

--计算24点

1.问题描述

在A、2、3、4、5、6、7、8、9、10、J、Q、K中任意选择4个数,通过这4个数进行任意+ 、- 、*、 /的运算(这四个数可以任意排列),而且可以添加需要的“()”来进行先后运算。看是否能够得到一个计算式,使得其结果为24。如果有,则输出所有的计算式,如果没有,则输出相应的提示。例如,对给定的2,7,J,Q,按下述方法计算可得到结果24,并且输出下列的表达式: (J-7)*(Q/2)=24

Q*(J-2-7)=24

由于输入有A、J、Q、K字符型数据,所以把输入数据存放在char字符型数组中,并且在程序内部定义一个数组,把输入的字符型数据一一转换为相对应的int整型,其中A代表为1,J代表为11,Q 代表为12,K代表为13。

约束条件:输入的4个数不能为重复,如果重复,则输出错误提示,并要求重新输入。而且输入的数不能在所要求的数之外,如果输入了不在输入范围内的数,则也应该输出相应错误提示,并要求重新输入。

2.实验设计

2.1 算法设计:

采用穷举法,把所有可能的情况一一计算,如果计算式得到24,则把相应的计算式输出;假设选择

A B C D四张牌,#代表操作符,则有以下五种情况:

1.((A#B)#C)#D

2.(A#B)#(C#D)

3.(A#(B#C))#D

4.A#((B#C)#D)

5.A#(B#(C#D))

把这些计算式都变成两两计算的情况,因此可以把一个计算式分成三个由两个运算数组合而成的计算式。其中的“#”可以是+、-、*、/ 中的任何一种运算,并且可以重复。A、B、C、D不能重复。由于按照以上的方法,ABCD的顺序固定,从而导致有一些情况不能被计算在内,所以需要列举出ABCD 所有可能的排序状况,再将A B C D所有的排列组合一一按照上面的五个计算式计算。这样就能把所有有可能的情况都包含进去,不会漏掉某个有可能得到24点的算法。对四个数没进行完一次排序,则对新的排序序列进行24点计算式比较,如果有计算式,则输出所有的计算式,如果没有,则输出提示。现在程序外定义一些全局变量:

cal r,w,t;//三个操作符类

char data[10];//输入的数据

int _data[10];//把牌转化为数字之后存放的数组

bool find=false;//如果find为false,则代表没有24点计算式,如果为true,则代表有

主函数伪码设计为:

int main()

{

tranput();//输入数据;

tran();//转换数据;

trandata();//处理数据;

if(find==false)//如果没有能得到24点的计算式,输出提示;

return 0;

}

定义4个函数,分别完成相对应的功能。

void tranput();//作用是让用户输入选择的牌;

void tran();//把字符型的输入转换为对应的数字,A代表1,J代表11,Q代表12,K代表13;

void look();//对于4张牌的一个组合寻找能得出点的表达式;

void trandata();//列出所选择4张牌的所有可能排列情况,再对每种情况进行look()操作;

2.2 伪码设计

存储结构设计,定义一个cal类,目的是重载操作符。重载函数返回经过重载后操作符运算的结果。

cal类伪码:

class cal //操作符类,重载操作符

{

public:

char s; //s为操作符

cal(){}

double operator()(double a,double b) //重载操作符

{

switch(s)

{

判断s,对不同的s返回不同的结果;

}

}

};

tranput()函数伪码:

void tranput()

{

for(int i=0;i<4;i++)

{

输入data[i];

定义一个判断型数组judge[];

相关文档
最新文档