前些时候,看到matlab论坛里面有会员提到要编人机猜数的游戏和机人猜数的游戏,恰好我编了人机猜数的游戏,附上;
人机猜数游戏
由计算机随机生成一个四位数,让人猜这个四位数字。人输入这个四位数字之后,计算机首先判断这四个数中几个猜对了,并且在猜对的数字中有几个位置也是对的,将结果显示出来,给人以提示,让人再猜,直到猜中计算机随即产生的四位数字位置,并且游戏结束时,显示人猜一个数字用了几次。
代码如下
机人猜数游戏
由人随即产生的一个四位数,让计算机猜这个四位数字。计算机输出这个四位数字后,人判断这四个数中几个猜对了,并且在猜对的数字中有几个位置也是对的,将结果输入计算机中,让计算机再猜,直到计算机猜中人产生的数字为止,并且在游戏结束时,最优化计算机交互的次数。(交互次数越少越好)
假设循环法
首先采用的假设的前景:例如人给出的9375,计算机给定1234,人返回1a0b;那么计算机假定正确的数值为1,下次应该给的数值应该包括1、5、6、7,由于需要获取位置的信息,那么向后移一位数值,第二次给出7156,人返回2a0b;那么计算机继续假定正确的数值为71,下次应该给的数值为7、1、8、9,向后移一位数值,第三次应该给出9718,人返回2a1b;那么假定1的数值位置正确...感觉离正确答案越走越远,swtich语句估计写不完了,还在思考中...
覆盖法
选定1-4为一区间,5-8为二区间,9和0为三区间,无论人给出哪个数值,计算机第一次总是1234,第二次为5678;比如人给出的数字为7420,那么计算机得出一区间有两个数,二区间有一个数,三区间有一个数,继续下去,还是swtich...不敢想下去了,这个是不是要把所有的情况全部写清楚才可以,不得而知...
统计概率法
初步想法是在覆盖法的前两步后,,随意给出第三步,根据人返回的信息,计算所有的满足可能产生的情况,然后分别计算数字0-9的概率,取得最大的四位,然后继续,一直下去,直到给出最终的结果。
最后一种方法已实现,需要者请发信息到我邮箱,感觉还挺好玩的。
有谁还有其他的好方法或者更简便的想法,请联系我,一起探讨探讨哈!