游戏24点课程设计报告
《数24点》教学设计三篇

《数24点》教学设计三篇数24点教学设计三篇教学设计一:基础版目标通过本节课的教学,学生将能够掌握数24点游戏的基本规则,并能够运用基本的运算符号和数字解决简单的数24点问题。
教学步骤1. 引入数24点游戏的概念和规则。
介绍游戏的目标是通过运用加、减、乘、除等运算符号,将给定的四个数字组合成24。
2. 提供一些例题,让学生尝试运用运算符号解决问题。
鼓励学生进行讨论和合作,共同寻找可能的解决方法。
3. 引导学生总结出一些解题的策略和技巧,例如先确定某个数字的位置,然后通过运算符号组合其他数字等。
4. 练时间:给学生一些练题目,让他们尝试解决。
教师可以提供适当的提示和引导,确保学生能够独立解决问题。
5. 总结与反馈:引导学生回顾本节课学到的知识,总结解题的方法和技巧。
鼓励学生分享自己的解题思路,并给予积极的反馈。
教学设计二:拓展版目标通过本节课的教学,学生将能够熟练运用加、减、乘、除等运算符号和数字解决更复杂的数24点问题,并能够培养逻辑思维和团队合作能力。
教学步骤1. 复数24点的基本规则和解题方法。
引导学生回顾前一节课学到的知识,并鼓励他们分享自己的解题经验。
2. 引入更复杂的数24点问题。
提供一些有挑战性的题目,要求学生通过合作和讨论的方式解决。
教师可以提供一些提示和引导,帮助学生克服困难。
3. 练时间:让学生团队合作,解决更多的数24点问题。
鼓励学生尝试不同的解题方法和策略,并互相研究、交流。
4. 分享与总结:鼓励学生分享自己团队解题的过程和策略,促进彼此之间的研究和提高。
5. 反馈与评价:教师对学生的表现给予积极的反馈和评价,鼓励他们继续努力和挑战更难的数24点问题。
教学设计三:创新版目标通过本节课的教学,学生将能够运用创新思维和算法设计解决复杂的数24点问题,并能够培养创造力和自主研究的能力。
教学步骤1. 复数24点的基本规则和解题方法。
引导学生回顾前面学到的知识,并鼓励他们分享自己的解题经验。
c语言课程设计24点

21.教学地点:计算机实验室,确保学生有足够的实践机会;
22.教学安排还应考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等,尽量安排在学生较为轻松的时间段进行授课,并提供与学生兴趣相关的编程实例。
七、差异化教学
根据学生的不同学习风格、兴趣和能力水平,本节课采取以下差异化教学措施:
6.学生分组讨论,合作编写24点游戏的程序;
7.学生展示自己的程序,互相评价,教师进行点评和总结。
三、教学方法
本节课采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
8.讲授法:教师讲解C语言的基本语法、编程技巧和24点游戏的实现方法;
9.讨论法:学生分组讨论,合作编写程序,互相交流思路和经验;
十、跨学科整合
本节课将考虑不同学科之间的关联性和整合性,促进跨学科知识的交叉应用和学科素养的综合发展:
32.结合数学学科:通过编写程序解决数学问题,如计算几何图形的面积、体积等,培养学生运用编程解决数学问题的能力;
33.结合物理学:利用编程模拟物理现象,如模拟物体运动、碰撞等,让学生了解编程在物理学领域的应用。
十一、社会实践和应用
为了培养学生的创新能力和实践能力,本节课将设计以下社会实践和应用相关的教学活动:
34.参观企业:学生参观软件开发企业,了解企比赛,如“蓝桥杯”等,提高学生的编程能力和竞争意识;
36.实际项目参与:为学生提供参与实际项目的机会,如合作开发一个小型的软件系统,让学生在实践中提升编程能力。
23.学习风格:提供多种教学资源,如教材、参考书、多媒体资料等,满足不同学习风格的学生;
24.兴趣:结合学生的兴趣爱好,选择有趣的编程实例进行教学,提高学生的学习积极性;
c课程设计24点

c 课程设计24点一、教学目标本课程的教学目标是让学生掌握24点游戏的规则和解题技巧,培养学生的逻辑思维能力和运算能力。
具体目标如下:1.知识目标:使学生了解24点游戏的历史背景和基本规则,掌握加、减、乘、除四则运算。
2.技能目标:培养学生独立完成24点游戏的能力,提高学生的运算速度和准确性。
3.情感态度价值观目标:培养学生团队合作精神,增强学生面对挑战的信心和勇气。
二、教学内容本课程的教学内容主要包括24点游戏的规则讲解、解题技巧训练和游戏实践。
具体安排如下:1.第一课时:介绍24点游戏的基本规则和玩法。
2.第二课时:讲解24点游戏的解题技巧,如数字拆分、运算顺序等。
3.第三课时:进行24点游戏实践,学生分组进行比赛,教师点评并指导。
4.第四课时:总结24点游戏的学习心得,学生分享自己的解题经验。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用以下教学方法:1.讲授法:教师讲解24点游戏的规则和解题技巧。
2.讨论法:学生分组讨论解题策略,分享心得体会。
3.案例分析法:教师出示典型病例,学生分析并解答。
4.实验法:学生动手实践,进行24点游戏比赛。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《24点游戏教程》2.参考书:《数学思维训练教程》3.多媒体资料:24点游戏教学视频、动画演示等。
4.实验设备:计算器、纸张、笔等。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,评估学生的学习态度和积极性。
2.作业:布置适量的作业,评估学生的掌握程度和运算能力。
3.考试:进行期中和期末考试,全面测试学生的知识水平和解题技巧。
4.比赛:24点游戏比赛,评估学生在实际操作中的表现。
评估方式应客观、公正,能够全面反映学生的学习成果。
教师应及时给予反馈,鼓励学生持续进步。
六、教学安排本课程的教学安排如下:1.课时:共8课时,每周2课时。
24点游戏教案(大全)

24点游戏教案(大全)第一篇:24点游戏教案(大全)24点游戏活动课教学设计教学目标:1、理解24点游戏的规则,掌握24点游戏的运算技巧2、操作实践算24点的扑克游戏,巩固加强有理数的四则运算3、寓教于乐,培养合作精神和创新意识,激发学生对数学学习的兴趣教学重点:游戏规则教学难点:计算的方法,特别是四张牌的计算的多样化教学用具:课件、扑克牌教学过程:一、24点游戏的规则1、将全班同学分成三个大组,在每个环节的活动中,由每个大组派一名同学到讲台,在每一副扑克牌(除去大、小王)中抽取四张扑克牌,用这四张扑克牌代表的四个数字按要求在规定的时间内(10分钟)进行运算(四个数只能用一次,可以使用括号),每次运算结果必须为24。
每做对一种方法得到10分,也可以向该小组其它成员求助,但只能得5分。
(注:A、J、Q、K分别代表数字1、11、12、13)。
2、在比赛中,各小组成员必须遵守纪律,不得乱叫乱喊,否则扣除该小组得分。
3、若该小组抽取的四张牌无法算出结果为24,可放弃,重新抽取四张,但每轮只能放弃两次。
二、24点游戏的基础技巧①凑24的因数(乘法)(比较常用)见2想12、见3想8;见4想6;②加减法三、24点游戏活动1、小分组内对抗,5分钟以后,获牌最多者晋级;2、12人晋级后分为三组,再进行组内对抗,5分钟以后,获牌最多的四人将进入最后决赛;3、四人在中间进行最后的大决战;以获牌多少分别评为第一名、第二名、第三名、第四名;四、活动总结1、本节课你开心吗?2、24点游戏你玩得怎样?有信心玩得更好吗?3、基础技巧是什么?第二篇:c++24点游戏c++24点游戏#include “iostream” #include “string” using namespace std;//定义Stack类const maxsize=20;enum Error_code { success, overflow, underflow };template class Stack { public: Stack();bool empty()const;bool full()const;int size()const;void clear();Error_code top(T &item)const;Error_code pop();Error_code push(const T &item);private: int count;T entry[maxsize];};template Stack::Stack(){ count=0;}templatebool Stack::empty()const { return count==0;}templatebool Stack::full()const { return count==maxsize;}template int Stack::size()const { return count;}template void Stack::clear(){ count=0;}templateError_code Stack::top(T &item)const { if(empty())return underflow;item= entry[count-1];return success;}templateError_code Stack::pop(){ if(empty())return underflow;count--;return success;}templateError_code Stack::push(const T &item){ if(full())return overflow;entry[count++]=item;return success;}Stack sign;Stack num;int set;// 判断程序中的异常,以便适时退出?//void process(char c)//计算两个数的 +-* / 运算// { int k=0;double a,b;sign.pop();if(num.top(b)==success){num.pop();if(num.top(a)==success){ num.pop();k=1;} } if(k){ switch(c){ case '+': num.push(a+b);break;case '-': num.push(a-b);break;case '*': num.push(a*b);break;case '/': if(b==0){ set=4;num.push(-1);} elsenum.push(a/b);break;} }else {set=1;num.push(-1);} }void get_command(string &str){cout<<“n请输入要进行运算的表达式,包括” +,-,*,/,=,(,)“和数字,”<<<“注意: 以数字开头,等号结尾,中间括号要匹配.”<>str;}double do_command(const string &str){ string s=“";double outcome=-1;char c;for(int i=0;str[i]!='';i++){if(set!=0)break;//例外则停止运行while(1){ //分离数据与运算符if(str[i]<='9' && str[i]>='0' || str[i]=='.'){ s+=str[i];i++;} else { if(s!=”“){if(num.push(atof(s.c_str()))==overflow)set=3;s=”“;} break;} }char ch= str[i];switch(ch){ //处理运算的优先级,并注意例外抛出case '*': case '/':if(sign.top(c)==success)if(c=='*'||c=='/')process(c);if(sign.pu sh(ch)==overflow)set=3;break;case '+': case '-':while(sign.top(c)==success){ if(c!='(')process(c);else break;}if(sign.push(ch)==overflow)set=3;break;case '(':if(sign.push(ch)==overflow)set=3;break;case ')':while(sign.top(c)==success){ if(c!='(')process(c);else break;}sign.pop();break;case '=':while(sign.top(c)==success){ if(c!='(')process(c);else break;} break;default: set=2;break;} }if(num.size()==1 && sign.size()==0)num.top(outcome);else set=1;if(set==0)cout<<”运算结果是:n“<if(set==1)cout<<”n您输入的不匹配,有错误发生。
《算24点》教学设计三篇

《算24点》教学设计三篇1、让学生掌握算“24点”的根本方法,并在游戏中稳固混合运算的运算顺序。
2、鼓励学生自主探究解决问题的策略,培养学生的合作精神和创新意识,激发学生学习的数学兴趣。
师:这节课,同学们和老师都带来了扑克牌,大家都很熟悉它,那你知道扑克牌有哪几种花色吗?每一种花色又有多少张牌呢?扑克牌是我们生活中必不可少的一种娱乐工具,它有很多种的玩法,今天我们就用它来算算24点。
师:你会玩算“24点”吗?能否说说怎么玩?结合学生的介绍,出示游戏规那么:(1)每人准备扑克牌A-10各一张(A表示1);(2)在我们准备的扑克牌中拿出几张牌,利用加加、减、乘、除进展计算,使最后的结果是24。
注意:每张牌只能用一次。
活动一:新手上路(两张牌算24点)1.找一找:找出两张牌算出24点。
(3和8,4和6)2.分别出示1、2、5、7、9,你能找出和这些数算出是24点的牌吗?小结两张牌算“24点”的根本方法:通过刚刚的活动我们发现,两张牌算出24点的可以直接用乘法算出。
见到3,想8;见到4,想6??活动二:能手展示(三张牌算24点)1.出示3张牌:7、6、3每组分工合作,一人拿出牌7,一人拿出牌6,一人拿出牌3,看看谁先算出24?(提示:联系这3个数,那些书能让你直接想到24?见6,想4。
7和3这两张牌怎样算,能够得到4?见3,想8。
7和6这两张牌怎样算,能够得到4?)交流、汇报。
2.出示3张牌:7、8、9相互讨论,说说自己的想法。
(提示:联系这3个数,这里有8,如果去找3,行吗?那该怎么办?乘法不行,我们可以试一试别的运算方法。
)小结三张牌算“24点”的根本方法:根据3张牌上的数,从中选取2个数进展第一次运算,把第一次算出的结果和另一个数进展第二次运算,使算出的结果为24。
(我们在算24点时,当一种方法行不通时,我们可以换其他方法再进展计算。
)3.出示3张牌:3、8、9汇报交流:活动三:高手擂台(四张牌算24点)出示4张牌:A、2、5、8小组合作交流,鼓励不同的算法小结:四张牌算24点,可以经过三步计算得到,一般都有好几种算法。
24点活动策划书3篇

24点活动策划书3篇篇一《24 点活动策划书》一、活动主题挑战智慧极限,玩转 24 点游戏二、活动目的1. 丰富同学们的课余生活,培养逻辑思维能力和快速计算能力。
2. 增强团队合作意识和竞争意识,营造积极向上的学习氛围。
3. 提供一个展示个人智慧和风采的平台,让同学们在轻松愉快的氛围中锻炼自己。
三、活动主体[具体参与活动的学生群体]四、活动时间[具体活动时间,如周末下午等]五、活动地点[详细活动场地,如教室、活动室等]六、活动准备1. 准备足够数量的扑克牌,确保每组参与者有一副完整的扑克牌。
2. 划分活动场地,设置好比赛区域和观众区域。
3. 安排工作人员负责活动的组织、计时、计分等工作。
4. 制作活动宣传海报,提前进行宣传推广。
七、活动流程1. 分组将参与者随机分成若干小组,每组人数视实际情况而定。
2. 规则讲解由工作人员向参与者详细讲解 24 点游戏的规则和玩法,包括如何利用扑克牌进行计算等。
3. 比赛环节(1)每组选手在规定时间内(如 5 分钟)轮流抽取扑克牌,进行计算,将结果报给工作人员。
(2)工作人员根据选手的计算结果进行评判,判断是否正确以及用时长短。
(3)计算正确且用时最短的小组获胜,依次进行晋级。
(4)若出现平局,则进行加赛,直到决出胜负。
4. 颁奖环节(1)根据比赛结果,评选出冠、亚、季军小组。
(2)为获奖小组颁发奖品和荣誉证书。
八、活动预算1. 扑克牌费用:[X]元2. 奖品费用:[X]元3. 宣传费用:[X]元4. 其他费用:[X]元总预算:[X]元九、注意事项1. 确保活动场地的安全,避免发生意外事故。
2. 提醒参与者遵守活动规则,尊重裁判的判决。
3. 工作人员要认真负责,确保活动的顺利进行。
4. 活动结束后,及时清理场地,保持环境整洁。
通过本次 24 点活动策划书,希望能够为同学们带来一场充满乐趣和挑战的智力盛宴,让大家在活动中收获知识、友谊和快乐,同时也提高自己的思维能力和综合素质。
初中24点游戏教案
初中24点游戏教案课程目标:1. 提高学生的四则混合运算能力,培养学生的逻辑思维和运算速度。
2. 培养学生团队协作和竞争意识,增强学生的学习兴趣。
3. 培养学生自主探索和创新能力,提高学生的数学思维。
教学内容:1. 24点游戏规则介绍2. 24点游戏技巧讲解3. 24点游戏实践操作4. 24点游戏比赛教学过程:一、导入(5分钟)1. 向学生介绍24点游戏的规则和玩法。
2. 举例讲解24点游戏的解题思路和技巧。
二、游戏讲解(10分钟)1. 讲解24点游戏的规则和注意事项。
2. 引导学生了解24点游戏中的运算顺序和括号使用。
3. 举例讲解24点游戏的解题方法和技巧。
三、游戏实践(10分钟)1. 学生分组,每组四人,进行24点游戏实践。
2. 每组派一名代表抽取一张卡片,其他成员协助解答。
3. 教师巡回指导,解答学生疑问,纠正错误。
四、游戏比赛(10分钟)1. 学生分组进行24点游戏比赛,每组四人。
2. 比赛分为两个环节:个人赛和团体赛。
3. 个人赛:每位学生抽取一张卡片,独立完成解答,计时五分钟。
4. 团体赛:每组抽取一张卡片,合作完成解答,计时五分钟。
5. 比赛结束后,教师公布答案,评选出获胜组和个人。
五、总结与反思(5分钟)1. 学生总结24点游戏中的经验和教训,分享自己的解题心得。
2. 教师对学生的表现进行点评,鼓励学生继续努力。
3. 布置课后作业:设计一道24点游戏题目,明天分享给大家。
教学评价:1. 学生对24点游戏规则的掌握程度。
2. 学生在游戏实践中的表现,包括运算速度、解题思路和团队协作。
3. 学生对24点游戏的学习兴趣和自主探索能力。
教学资源:1. 24点游戏卡片2. 计时器3. 教学PPT教学建议:1. 注重学生的个体差异,因材施教,给予不同水平的学生适当的指导。
2. 鼓励学生积极参与游戏,培养学生的自信心和竞争意识。
3. 结合课后作业,让学生自主设计24点游戏题目,提高学生的创新能力。
24点游戏的课程设计
24点游戏的课程设计一、课程目标知识目标:1. 学生能够理解24点游戏的规则,掌握基本的四则运算。
2. 学生能够运用加、减、乘、除运算解决24点游戏问题,提高计算能力。
3. 学生能够运用所学的数学知识,发现并总结出解决24点游戏的策略和规律。
技能目标:1. 学生能够通过观察、分析,运用逻辑思维解决24点游戏问题。
2. 学生能够在合作交流中,提高沟通和团队协作能力。
3. 学生能够运用所学知识,创新解题方法,形成自己的解题技巧。
情感态度价值观目标:1. 学生对数学产生浓厚的兴趣,认识到数学的趣味性和实用性。
2. 学生在游戏中体验合作与竞争,培养积极向上的学习态度。
3. 学生通过解决24点游戏问题,培养勇于挑战、克服困难的信心和毅力。
4. 学生在课堂活动中,学会尊重他人,积极参与,形成良好的集体荣誉感。
本课程针对小学四年级学生设计,结合学生年龄特点和数学知识水平,注重培养学生的基本运算能力、逻辑思维能力和团队合作精神。
课程目标具体、可衡量,旨在帮助学生将所学知识应用于实际情境中,提高解决实际问题的能力,为后续数学学习打下坚实基础。
二、教学内容1. 引导学生回顾四则运算的基本规则,确保学生掌握加、减、乘、除的运算方法。
2. 介绍24点游戏的起源、规则及玩法,使学生了解游戏的背景和趣味性。
3. 结合教材相关章节,讲解如何运用四则运算解决24点游戏问题,让学生在实际操作中掌握计算方法。
4. 分析并总结解决24点游戏的策略和规律,提高学生逻辑思维能力和解题技巧。
5. 设计不同难度级别的24点游戏题目,让学生在挑战中逐步提高运算速度和准确性。
6. 组织学生进行小组合作交流,分享解题心得和经验,培养学生的团队合作精神。
教学大纲安排如下:第一课时:导入,介绍24点游戏的规则和背景,进行简单的四则运算复习。
第二课时:讲解解决24点游戏的基本方法,分析游戏策略,进行实际操作练习。
第三课时:设计不同难度级别的题目,让学生分组挑战,培养团队合作能力。
24点活动策划书3篇
24点活动策划书3篇篇一24 点活动策划书一、活动主题“头脑风暴,挑战 24 点”二、活动目的通过趣味的 24 点游戏,锻炼参与者的数学运算能力和思维敏捷性,培养团队合作精神,同时也为大家提供一个轻松愉快的交流氛围。
三、活动参与人员[具体参与人员范围]四、活动时间和地点时间:[具体活动时间]地点:[详细活动地点]五、活动准备1. 准备足够数量的扑克牌。
2. 布置活动场地,确保舒适和宽敞。
3. 准备相关的奖品和纪念品。
六、活动流程1. 开场介绍活动规则和目的。
2. 分组进行比赛,每组[X]人。
3. 主持人发放扑克牌,每组抽取一定数量的牌。
4. 小组内成员合作,运用加、减、乘、除四则运算,尽可能快地得出 24 点。
5. 规定时间内得出正确结果的小组得分,得分最高的小组获胜。
6. 进行多轮比赛,增加竞争的激烈程度。
7. 宣布最终获胜小组,颁发奖品。
七、活动预算主要包括扑克牌采购、奖品费用等,预计总费用为[具体金额]。
八、注意事项1. 确保活动过程中的安全,避免因竞争导致的意外发生。
2. 维持好现场秩序,保证活动的顺利进行。
3. 鼓励所有参与者积极投入,享受活动的乐趣。
策划人:[姓名]日期:[具体日期]篇二《24 点活动策划书》一、活动主题“头脑风暴,挑战 24 点”二、活动目的通过趣味的 24 点游戏竞赛,提高参与者的数学运算能力和思维敏捷性,同时增强团队合作和竞争意识,丰富大家的业余生活。
三、活动主体[具体参与对象]四、活动时间[具体活动时间]五、活动地点[详细活动地点]六、活动准备1. 准备足够数量的题目卡片,涵盖不同难度级别。
2. 准备答题纸、笔等文具。
3. 布置活动场地,营造轻松愉快的氛围。
4. 准备奖品,以激励参与者的积极性。
七、活动流程1. 签到入场,将参与者分成若干小组,每组人数根据实际情况确定。
2. 讲解活动规则和注意事项。
3. 正式开始比赛,每组轮流抽取题目卡片,在规定时间内通过四则运算得出结果为24。
24点游戏课程设计报告
目录1基本功能描述 (2)2设计思路 (2)3软件设计 (4)3.1 设计步骤 (4)3.2 界面设计 (5)3.3 关键功能实现 (6)3.3.1 发牌功能的实现 (6)3.3.2 计时功能的实现 (7)3.3.3 计算功能的实现 (7)3.3.4 验算功能的实现 (9)4结论与心得体会 (9)5参考文献 (11)6思考题 (11)7附录 (12)7.1 调试报告 (12)7.1.1 变量未定义造成的错误 (12)7.1.2管件类未添加 (13)7.1.3进度条错误 (13)7.2 测试结果 (14)7.2.1在规定时间内完成点击“验算”按钮操作 (14)7.2.2在规定时间内未完成点击按钮操作 (16)7.3 关键源代码 (17)24点游戏课程设计报告1基本功能描述24点游戏是一种使用扑克牌来进行的益智的游戏,游戏内容为:从一副扑克牌四个花色的1到K等52张牌中,任意抽取4张牌,运用加、减、乘、除和括号等运算符把牌面上的数进行运算得到24。
游戏有不同的版本,其实是对J、Q、和K的处理有所不同。
有的版本版本是把J、Q、和K去除,只用1到10来进行游戏;有的版本是把J、Q、和K 当成10;还有的版本是用J表示11,Q表示12,K表示13。
此次课程设计采用的是把J 表示11,Q表示12,K表示13,使游戏的四张牌在1~K这13张牌中随机取牌。
具体功能如下:1)对游戏设计三个难易级别,分别为一级、二级和三级。
每次开始游戏前可以根据玩家的需要进行难度设置,如若不设置,系统默认难度级别为一级,设置完难度级别之后就可以开始游戏了,单击“开始”按钮,桌面上出现四张翻开的扑克牌,与此同时,游戏开始计时,进度条开始前进。
2)在规定的时间内,玩家可以在“输入结果”的编辑框中输入自己想好的算式,然后点击“验算”按钮:如果输入的算式经运算后所的答案正确,则会弹出“Congregations,答对了!”的窗口;如果输入的数字与给出的牌的数字不符或者符号不合法,则会弹出“Sorry,请输入正确的算式!”的窗口;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,则会弹出“ Your answer is wrong!”的窗口;如果未输入任何的数字和算符,则会弹出“输入不能为空!”的窗口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
游戏24点课程设计报告一.题目:分析类:计算24点:任意输入4位数字,利用+,-,*,/四则运算使之得到结果 24。
输出所有不同算法的计算表达式,可为运算优先级而使用括号。
二.问题分析:1.全面性:此问题要求输出结果为24的计算表达式,并且要求输出要全面,我考虑用for循环与递归实现遍历来保证输出的全面性,考虑到递归的‘一归到底',每一次完整递归都代表一种算法(详情见算法)。
2.输出的判定和四位数字的类型:在输出的时候对最后结果等于24的判别,因为考虑到有除法,有可能中途结果可能会出现不能整除的情况与小数,所以输出的四个数都设为float型,且输出判定的时候用近似判定法,而不直接写让最后结果等于24(详情见算法)。
3.重复性:如果用循环与递归保证了输出24的表达式的全面性,但不可避免的会出现重复,才开始我想在遍历与递归时,加一些限定条件来消除重复但是这样做不但会出错,还不能保证它的输出全面性。
于是我想在输出的时候加限定条件,使重复的只输出一遍。
但是对于输入的那4位数字中如果有重复的话,程序结果还是会出现重复的,此问题尚未解决.(详情见算法)。
4.括号问题的处理:对于括号问题,我规定对每一步的计算表达式,除了*之外,+,-,\都加上括号,即让程序按自己规定的方向执行,输出的括号只是让人能看懂,其实在运算时不起作用(详情见算法)。
5.输出:输出方面我以为用了遍历所以在每一层遍历都把运算表达式存到一个较大的数组中,在输出的时候如果满足输出条件(在遍历时纪录每次递归的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符),就直接把那个数组里的内容输出,遍历会直接去寻找表达式里的表达式(详情见算法)。
三.算法描述(源代码里有更详尽解释):1.主要方法:遍历与递归。
2.主要思路:把输入的四个数放在一个数组n[4]中,然后任取其中任意两个(不能取同一个--既不能出现自己和自己运算的情况),然后用一个for和一个switch语句来实现这两个数的加减乘除运算,然后把运算的结果放到另一个数组b[4]中并记录此运算的表达式(放到一个大一点的数组tm[4][25]中),同时把其他两个没用到的数也放到该数组中,然后重复以上过程(用遍历实现),最后先判定是不是最后一层运算,是的话在判定最后结果是不是等于24,等于24的话就把那个纪录运算式的数组输出。
然后考虑到不能出现重复的(例如:1*2*3*4和2*4*3*1等等)我在遍历的同时记录了第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,对输出的时候做限定(例如:对运算符全*的只输出一遍等等)。
在有一次输出后我还定义了另外两个数组用来分别保存上一次输出的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,来解决重复输出的问题,不过此种做法有可能导致输出的时候不全。
(此问题尚未解决)即还不能同时保证全面性与不重复性。
3.主要函数与数组:主要有两个函数,一个主函数,用来输入四个数,并且完成初始化。
还有一个count(float a[],char tem[][25],int n)函数,用来完成遍历,递归,与输出,其中a[]中存放要输入的4个数,tem[][25]中放计算步骤,n 是a[]中元素的个数。
在函数体内还定义了b[4]和tm[4][25]用来完成递归,函数一开始先判定输出条件(是否是第三次运算,结果是否等于24),如果不满足条件就做遍历与递归,遍历用了3个for 循环和1个switch 语句来完成,然后为递归准备数据,用sprintf 函数将运算式输出到数祖tm[]中,在输入运算式的同时把括号输到tm[]中,然后提取第一次运算的运算符与运算结果,提取第二次运算的运算符与运算结果和提取第三次运算的运算符,然后备份没用到的数据(为递归之用)。
接下来进行递归重复上述过程。
4.算法流程图:(简化的流程图,源代码里有更详尽解释)主函数流程图其中k是全局变量用来判定算法是否有解count(函数流程图四.源代码及其分析#include<iostream.h>#include<math.h>#include<string.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#define MAX 4;//最大输入个数。
int k=0;//全局变量用来判定是否有解char tp[4]={0,0,0,0},tpt[2000]={0},tptt[2000]={0},tre[2000]={0};//用来消除重复。
tp[1-3]用来记录运算式中的3个运算符。
char op[4]={'+','*','-','/'};void count(float a[],char tem[][25],int n);//a[]中存放要输入的4个数,tem[][25]中放计算步骤,n是a[]中元素的个数。
int q=0,p=0,e=0,w=0,t=0,r=0,g=0,h=0,v=0,u=0,tu=0,te=0;//用于消除重复。
float group[2]={0,0},flow[20]={0},flo[20]={0};////tem[][25]中放计算步骤,n是a[]中元素的个数。
void main(){char br=1;int d;while (br==1){ float number[4];//放四个数。
char temp[4][25]; //放运算式,初始化放四个数。
cout<<"please insert four numbers:";cout<<endl;for(d=0;d<4;d++)cin>>number[d];//输入四个数for(d=0;d<4;d++){sprintf(temp[d],"%d",(int) number[d]);}//初始化temp[d];count(number,temp,4);//调用count函数。
if (k==0)cout<<"no answer";cout<<endl;cout<<"press 0 end"<<endl;scanf ("%d",&br);}}void count(float a[],char tem[][25],int n){float b[4];char tm[4][25];//b[4]和t[4][]作用同上(为递归之用)。
int i,j,l,x,y;//i,j用来作双循环;l用来作加减乘除的开关;x,y为后面准备递归数据之用。
/************************************************************************************/ //输出部分if(n==1){if (fabs(a[0]-24)<0.00001)//因为要考虑除法所以用fabs函数求绝对值与24比较。
//相当于等于24时的情况。
{/************************************************************************************/ //以下是限定输出条件:if(tp[3]=='-'&&tp[2]=='-'&&tp[1]=='*'){if(te==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;te=1;}}//对运算符全*的只输出一遍。
else if(tp[3]=='+'&&(tp[2]=='+'||tp[0]=='+')&&tp[1]=='+'){if(t==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;t=1;}}//对运算符全+的只输出一遍。
else if(tp[3]=='+'&&(tp[2]=='*'||tp[0]=='*')&&tp[1]=='+'){if(g==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;g=1;}}else if((tp[3]=='-'&&tp[2]=='+')||(tp[3]=='+'&&tp[2]=='-')){if(w==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;w=1;}}//对于第二次运算时取到b[0]时,第一第二个运算符是+,-或-,+的只输出一遍。
else if(tp[3]=='+'&&tp[2]=='+'){if(u==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;u=1;}}//对于第二次运算时取到b[0]时,第一第二个运算符是+,+的只输出一遍else if(tp[3]=='*'&&tp[2]=='*'){if(r==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;r=1;}}else if(tp[3]=='*'&&tp[0]=='*'&&tp[1]=='+'){if(tu==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;tu=1;}}else{ for(h=0;h<q;h++){if(group[0]==flow[h]){if(tp[3]==tpt[h]){if(tp[2]=tptt[h]){if(group[1]==flo[h]){if(p==0){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;p=1;}}}}}else if(h==q-1){cout<<"\n有解为"<<tem[0]<<"=24";//最后的运算式存在tem[0]中k=1;}}}flo[q]=group[1];//限定条件初始化。