学进去-教育应平等而普惠
试题
类型:操作题
难度系数:0.15
所属科目:高中信息技术
现有如下问题,在一个 6×6 的跳棋棋盘上放置 6 个棋子,使得每行、每列,每条斜线上至多有一个棋子,请问有几种不同的摆法。为了方便处理,可将棋盘模拟成 6*6 的正方形矩阵,如图1所示。该矩阵中从左往右列号依次 1,2,3,4,5,6,从上往下行号依次为 1,2,3,4,5,6。若在位置(1,2)(指第一行第二列)中放置了一个旗子,则第一行,第二列以及该位置所在的左斜线与右斜线均无法放置其他棋子。
解决该问题的算法思想如下:

图1
①从第一行开始逐行放置棋子。
②每行从左到右逐列尝试放置棋子,放置之前与已放置的棋子作比对。
③若无冲突,放置该行棋子并跳转至下一行。
④若有冲突,则在本行中向右继续寻找放置棋子的位置,若找不到则返回上一行,重新寻找棋子放置位置。
⑤最后一行放置结束,输出一种方案并继续寻找下一方案。用 VB 程序实现该算法,程序界面设计如图2所示。

图2
(1)若第一行的棋子放置在第三列,则第二行不能放置棋子的列的数量为________。(填个数)
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Const n = 6
Dim a(1 To n) As Integer
Dim m As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer
m = 0
For i = 1 To n
a(i) = 0    'a(i)存储第 i 行放置棋子的列号
Next i
For i = 1 To n + 1
If i = n + 1 Then       '所有行棋子放置完毕,输出一种方案
m = m + 1
s = ""
For j = 1 To n
s = s + Str(j) + ":" + Str(a(j)) + "|"
Next j
List1.AddItem s
i = i - 2
Else       '寻找下一行棋子放置位置
j = a(i) + 1
Do While j <= n And check(i, j) = False
___________
Loop
If j <= n Then
a(i) = j
Else
a(i) = 0
_____________
If i < 0 Then Exit For
End If
End If Next i
Label1.Caption = "共有" + Str(m) + "种方案" End Sub
'判断当前放置的棋子与已放置有无冲突
Function check(i As Integer, j As Integer) As Boolean
check = True
For k = 1 To i - 1
If a(k) = j Or j + i = a(k) + k Or __________ Then
check = False
End If
Next k
End Function
编辑解析赚收入
收藏
|
有奖纠错

同类型试题

优质答疑

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

用户名称
2019-09-19

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

用户名称
2019-09-19
我要答疑
编写解析
解析:

奖学金将在审核通过后自动发放到帐

提交
我要答疑
我要答疑:
提交