永发信息网

数学建模 24点游戏问题 在线等

答案:2  悬赏:40  手机版
解决时间 2021-04-04 09:53
24点游戏,游戏规则:
(1)任取4个整数(取自1-9),每个整数限用一次;
(2)运算规则:加、减、乘、除和括号(不限次数);
(3)运算过程中允许出现分数;
(4)运算结果为24。
用什么建模方法来解决?
最佳答案
利用计算程序来完成这个计算二十四点的程序
方法如下:
首先穷举的可行性问题。把表达式如下分成三类——
1、 无括号的简单表达式。
2、 有一个括号的简单表达式。
3、 有两个括号的较复杂表达式。
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
那么作为栈的著名应用,表达式的计算可以有两种方法。
第一种方法:
首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
1、 若W为操作数
2、 则将W压入操作数栈OVS
3、 且继续扫描下一个字符
4、 若W为运算符
5、 则根据运算符的性质做相应的处理:
6、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
7、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
8、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
9、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
第二种方法:
首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
表达式波兰表达式
A-B AB-
OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
下面给出转换和计算的具体实现程序——
这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。很快就算出来了,原来如此简单——(6-3)*10-6=24。
全部回答
这是一个必胜策略的游戏。非常遗憾的是我还没有学到数学建模的时候,就毕业了,而且以后再也没有学过数学。解决问题是不难的,不过我不知道我的思路能不能算是数学建模,希望能给您一点启发。 根据楼主的叙述,我们可以看到,如果要求必胜策略,那么必胜的一方就一定要对局面有控制力,保证不管对方如何进行,局面一定在自己的掌控之中。 如何控制局面呢,我这么觉得——道理上也应该是这样,就是每次拿得越少,就越能控制局面,比如每次只拿一个,对方只有两种选择,这应该是最容易控制的局面了。因为每轮次只最多消失3个棋子,相当容易控制。 我假设,当棋子数量足够多的时候,赢家的策略就是在控制局面的情况下尽量少拿,既保证自己执行控制,也让我们便于分析。 现在分析当乙拿完之后的情况,举几种特例,来总结一下。当然,我们假设双方每次都拿很少,为了不让对方一次全部拿走。 (一)乙拿完之后剩余4个。这个时候只要甲拿走一个,不管乙怎么拿甲都胜利。 (二)乙拿完之后剩余5个。因为甲不能拿走全部,所以不管甲怎么拿,乙都胜利。 (三)乙拿完之后剩余6个。甲拿一个。(1)之后如果乙拿一个的话,则剩余四个,情况同前面,甲必胜;(2)如果乙拿两个,甲可以拿剩余的三个,甲胜利。 (三)乙拿完之后剩余7个。甲拿两个。(1)如果乙拿一个,则剩余四个,甲胜;(2)如果乙拿两个或大于两个,甲可以拿走剩余全部,甲胜。 (四)乙拿完之后剩余8个。甲不能全部拿走,(1)甲拿一个,乙拿两个,乙胜(2)甲拿两个乙拿1个,乙胜(3)甲拿3个以上,乙就全拿走,乙胜。剩余8个,乙必胜。 (五)乙拿完之后剩余9个。甲拿1个,剩余8个,前面分析了,剩余8个的时候如果不能全部拿走,那么轮到谁拿谁就输。所以甲胜。 (六)乙拿完之后剩余10个。甲拿两个,还是给乙留8个,还是甲胜。 (七)乙拿完之后剩余11个。甲拿三个,还是给乙留8个,还是甲胜。 (八)乙拿完之后剩余12个。甲拿一个,(1)乙拿一个,胜10个,如前所述,甲胜;(2)乙拿两个,剩余9个,还是甲胜。 (九)乙拿完之后剩余13个,还是甲胜,还用多说么。 必胜策略已经出炉了。 当棋子足够多的时候,只要甲每次只拿一个,控制乙,乙只能拿一个或者两个。那么慢慢拿下去,因为每个轮次最多只拿走三枚棋子,到最后就一定会出现乙拿完之后剩余11,10,9这三种情况之一,就是甲必胜。 总结一下,当棋子数量大于8个的时候,甲必胜;当棋子数量为8或者5的时候乙必胜;当棋子数量为4、6、7甲必胜;棋子数量小于4就没有讨论的价值了。 所以,排除特例,当棋子数量大于8的时候,先拿必胜。策略就是先拿的一方每次只拿一个,一直到出现剩余棋子数量为9或10或11这三种情况之一为止;出现这三种情况之后,甲拿掉棋子,使得剩余棋子数量为8,不管乙怎么拿,都是甲胜利。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有哪些带娟字的成语 或者 帮我起个带娟字的Q
怎么样上传视频,网络小说怎样上传 如何在网上
请知道的朋友再帮我识个植物。叶子跟丝瓜叶很
单选题下列统计量中,能反映一名同学在7~9年
下边哪句填入文中的横线处最恰当自然美有两种
怎样成为公众号
看好了比德文的V风系列,不知道比德文电动车
芦笋要煮多久才熟?
安慰失恋人的有趣诗句,有哪些古诗有有趣的来
我下了个沃商店这个应用,我也开通了流量,但
VBA自定义公式应用到全部工作簿的问题
罐装的沙拉酱怎么装到挤酱瓶里,没有那种裱花
龙瑞按摩中心地址在什么地方,想过去办事
求同一男生的六张以上的高清图片越高清越好
在下面句子中填上合适的歇后语。 (1)随着上
推荐资讯
下列叙述不正确的是A.氯化钠可作调味品B.一氧
单选题俗语说:“劈柴不照纹,累死劈柴人。”
水产养殖适合多大倍数的显微镜,指环虫 三代
非凡的意思,成语“意义非凡”的意思l
诺基亚1020摄像头传感器是索尼做的吗
单词拼写写出该单词的正确形式。每空只写一词
李连杰的电影杀手之王里面最后和曾志伟打架那
是谁让少年带着痛苦与惧怕走完他的人生
我家冰箱用了5年左右,自燃了,把家里都烧了
彩虹儿童诗歌,舞蹈彩虹的微笑串词,一个人的
对女儿十八岁的寄语,古诗词寄语
男朋友一直不带你去见父母怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?