锤子移动规则:锤子每秒必须往左或往右移动一步(不可在当前位置停留),如果锤子已经在最左边了,只能往右移动;反之,只能往左移动。
计分方式:如果打中一个地鼠,计 1 分;如果连续打中地鼠,分数翻倍,即连续打中两个,分数为 1+2;连续打中三个,分数为 1+2+4;连续打中四个,分数为 1+2+4+8……
算法思路:
①随机产生在第i 秒时,地鼠探出脑袋的洞口为 j,若每个时刻地鼠探脑袋的洞口如下图所示,以 10 个洞口为横坐标n,游戏时间 t为纵坐标,建立一个矩阵a。当前时间出现地鼠的洞口标记为 1,其余默认为 0。
②模拟第 i 秒敲击洞口的位置:
1)若输入游戏过程如下图所示,从 5 号洞口出发 b(1)=5,当时间为 i=1 时,可到达的洞口有 2 种:j=2 时 b(2)=6,j=1 时 b(1)=4,即得矩阵 a 的坐标位置 i 和 b(j);
2)同理当 i=2 时,可到达的洞口有 4 种:j=4 时 b(4)=7,j=3 时 b(3)=5,j=2 时 b(2)=5,j=1 时b(1)=3。i=1 敲击洞口位置为 6 或 4;i=2 敲击洞口位置 6→7,6→5 或 4→5,4→3。
3)将 t 秒内可经过的 2^t 种不同路径敲击的矩阵位置的值存放到数组 p 中,如下图所示得到其中某一条路径p(j)=0101100010,根据 p(j)计算得分,找出最值 max 并输出。
(1)如果游戏时间为 10 秒,每秒地鼠都选择在第 2 个洞口,当锤子的起始位置在第 6 个洞口时,最多能得 分。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Const n = 10
Dim a(1 To n * n) As Integer,b(1 To 2 ^ n) As Integer Dim p(1 To 2 ^ n) As String,s1 As String
Dim i As Integer,j As Integer,k As Integer,max As Integer Dim t As Integer,s As Integer,f As Integer
Randomize
t = Val(Text1.Text)
For i = 1 To t '第 i 秒时,地鼠探出脑袋的洞口为 j
j = Int(Rnd * n + 1)
①
List1.AddItem Str(i) & Str(j)
Next i
s1 = ""
For i = 1 To t * n
s1 = s1 + Str(a(i))
If i Mod n = 0 Then List2.AddItem s1:s1 = ""
End If
Next ib(1) = Val(Text2.Text)
For i = 1 To n '计算锤子在 a 矩阵移动的路径,并存放在 p 数组
k = 1 'k 为正则向右移动锤子,k 为负向左移动锤子
For j = 2 ^ i To 1 Step -1
b(j) = b((j + 1)\2) + k
If b(j) < 1 Or b(j) > n Then b(j) = b(j) - 2 * k
p(j) = p((j + 1) \ 2) + CStr( ② ) ’ CStr 功能类似 Str
k = -k
Next j
Next i
max = 0
For i = 1 To 2 ^ n
f = 0:s = 0:j = 1
Do While j <= Len(p(i))If Val(Mid(p(i),j,1)) > 0 Then
f = f * 2 + Val(Mid(p(i),j,1))Else
s = s + f:f = 0 End Ifj = j + 1 Loop
If f > 0 Then ③ If max < s Then max = sNext i
Label1.Caption = "最多能得" + Str(max) + "分" End Sub
同类型试题
y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2
y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2