利用图形计算器计算猜数字游戏
我是一个小小的石头-读昆虫记有感
利用图形计算器计算猜数字游戏
猜数字(又称 Bulls and Cows )是一种20世纪中
期的益智类小游戏。一般由两个人玩,
也可以由一个人和电脑玩,在纸上、在网上都可以玩。这种游戏规
则简单,但可以考验人的
严谨和耐心。
所在省市: 天津市
作者姓名:
李元亨
1
摘要:
本文选择“猜
数字游戏”,通过数学分析完成其优化策略的生成。作者在进行猜
数字游戏的同时,突发奇想,是否可以
把猜数字游戏——利用图形计算器的编程功能——推
广到图形计算器之中并且求解出其优化策略。
关键词:
图形计算器 最优策略 编程 猜数字游戏
一.编写猜数字程序
(一)简单背景介绍
猜数字(又称
Bulls and Cows )是一种古老的益智类游戏。通过多次对数字的猜
测和对数字位置的提
示,完成数字。这种游戏规则简单,但可以考验人的严谨和耐心。游戏
规则如下:
一般两个人
玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不
能让猜得人知道。猜的人就
可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A
几B,其中A前面的数字表示位置正确的
数的个数,而B前的数字表示数字正确而位置不
对的数的个数,接着猜的人再根据出题者的几A几B继续
猜,直到猜中为止。
(二)编程计划
1)首先用随机变量生成一个四位数(要求每一位都不同)
2)将此四位数各位分开并存储在不同的变量中
3)要求用户输入一个四位均不相同的四位数
4)首先对比各位中有无相同的数字,并统计其个数
5)其次筛选其中位置错误而数字正确的个数
6)输出结果,等待用户输入
7)循环直至输入结果正确为止
(三)操作过程
我们所使用的图形计算器的型号为Casio
CG-20计算器(为便于理解,将操作语言
调至中文)
首先打开图形
计算器,进入程序并新建文件(注意cg20的函数不能手动输入,只
能通过按shift+vars进
入)
2
步骤一:用随机变量生成一个四位数(要求每一位都不同)
程序如下
此时的K输出只用于测试,请务必
删除(否则答案自动输出了)
步骤二:分离各位数字
我们可以发现,在计算四位数中是否有重复数字时,已分离出四位
其中:千位为A、百位为B、十位为C、个位为D
步骤三:要求用户输
入一个四位均不相同的四位数(必须判断是否为无重复、有意
义的四位数),并记录输入次数
1)输入数字
2)分离各位数字
其中:千位为E、百位为F、十
位为G、个位为H
3
3)判断是否符合要求
4)若不符合,继续循环,等待输入
步骤四:核心计算
1)建立统计变量Y(加在输入循环体之前)
2)判断数字和位置均符合的个数(统计变量W)
4
将相同的值赋值为0.1为了将来判断数字相
同而位置不对的个数
3)判断数字对而位置不对的(统计变量X)
5
4)输出结果
5)判断是否正确——若是,退出循环;反之,继续直到出现正确结果或错误大于
15次
加入循环嵌套与标识变量
下面是判断语句
6
6)输出尝试次数
步骤五:程序测试
7
程序原代码:
'ProgramMode:RUN
ClrText
Do
RanInt#(0,9999)->S
S->K
Int
(S1000)->A
S-1000*A->S
Int (S100)->B
S-100*B->S
Int (S10)->C
S-10*C->D
If B=A Or B=C Or B=D Or A=C Or A=D Or C=D
Then
RanInt#(0,9999)->S
Else
Break
LpWhile 1
KDisps0->Y
Do
1->V
Do
8
Int
(N1000)->E
N-E*1000->N
Int (N100)->F
N-100*F->N
Int (N10)->G
N-10*G->H
0->Z
If E=F Or E=G Or E=H Or F=G Or F=H Or
G=H Or E>9 Or Int H<>H
Then
Else
Break
IfEnd
LpWhile Z=1
0->W
If A=E
Then
W+1->W
0.1->E
IfEnd
If B=F
Then
W+1->W
0.1->F
IfEnd
If C=G
Then
W+1->W
0.1->G
IfEnd
If D=H
Then
W+1->W
0.1->H
IfEnd
0->X
If E=A Or E=B Or E=C Or E=D
Then
X+1->X
IfEnd
If F=A Or F=B Or F=C Or
F=D
Then
X+1->X
9
IfEnd
If G=A Or G=B Or G=C Or G=D
Then
X+1->X
IfEnd
If H=A Or H=B
Or H=C Or H=D
Then
X+1->X
IfEnd
If W=4
Then
IfEnd
If Y>15
Then
IfEnd
LpWhile 0=0
二.统计分析猜数字游戏的最佳算法
(一)查阅资料 我们有以下几种策略可供选择,包括简单策略——每次都猜可能答案中的第一个、
启发式策略——通
过计算可能集缩小的大小分为最坏情况指标、平均情况指标、预期步数
指标。(来源于百度百科)
(二)利用图形计算器统计学分析
经过多次练习,作者可以熟练掌握几种常见的策略,故利用Casio CG-20的统计功
能
选择几组最擅长的方法来统计、评估每种算法的优劣,统计指标是简单的统计学数据,包
括最大值、最小
值、中位数、众数、平均数和方差来综合统计每一种算法的好坏(实验数据
中有一部分来源于作者亲身试
验并且舍弃极端值)主要统计以下几种算法:
1)简单策略
2)平均情况指标策略
10
3)最坏情况指标策略
(三)实际操作
实际操作中有大量的数据需要处理、筛选,经过多次认真筛选,得到以下三组实验
数据。
1)简单策略
实验次数
实验结果
1
5
2
4
3
7
4
6
5
6
6
5
7
3
8
8
9
5
2)平均情况指标策略(后三组数据为程序计算)
实验次数
实验结果
3) 最坏情况指标策略(全部为程序计算)
实验次数
实验结果
1
5
2
7
3
6
4
6
5
4
6
5
7
6
8
5
9
3
1
4
2
5
3
5
4
4
5
6
6
4
7
5
8
3
9
6
1)首先打开图形计算器,进入统计
2)输入数据并计算
11
简单策略
最大值
8
最小值
3
中位数
5
众数
5
平均数
5.44
方差
285
平均情况指标策略
最大值
6
最小值
3
中位数
5
众数
4,5
平均数
4.67
方差
204
最坏情况指标策略
最大值
7
最小值
3
中位数
5
众数
5,6
平均数
5.22
方差
253
(四)数据分析
显然
,平均情况指标拥有最小的方差,即其稳定性最好、其次是最坏情况指标、最
后是简单策略。平均情况指
标同时拥有最小的平均数,即其试验次数最少,不失是一种最有
效算法;在众数上的表现也略好于其他两
组,而统计数据中没有体现的是其所需时间较长,
12
大约是简单策略的两倍。
而最坏情况指标,无论从时间、稳定性、有效性都不
太优秀,不过根据软件统计资
料,它在解决可重复多位数上有很大的优越性,其位数越多优越性越大。
简单策略在时间上有不可忽视的优势,可是在解决较大(7000以上)四位数时计
算量就有了
较大的上升,计算到后期要思考的方面就上升很多,其中需要8次试验的结果就
是8729。
观察中位数,都是5可以大致证明一个四位不重复数字再无次左右可以猜出。
13