模拟某新型病毒传播的过程,已知有n*n个格子(1<=n<=10),某天其中某些格子由于不知名原因感染了病毒,开始影响周围的格子。传染原理如图a所示:
某3行3列的格子初始状态如图a所示,1表示异常(由于不知名原因感染了病毒且具有传染性),0表示正常。除了边上一圈的格子,每个格子周围有8个格子,第一天某正常格子周围超过半数格子异常,则该格子第二天就会变异常,并且带有传染性。传染过程如图b所示,矩阵中1、2、3、4分别表示该格子第1天、第2天、第3天、第4天被感染,0表示未被感染。可以看出该矩阵格子第4天全部被感染。 编写VB程序,运行程序后,在Text1中输入矩阵规模(不超过10),单击“初始化”命令按钮,在List1中输出第一天所有格子的状态,单击“传播”命令按钮,在List2中输出所有格子的最终状态,并在Label2中输出第几天全部被感染或者“不会被全部感染”。 程序运行界面如图c所示。
(1)
已知第一天所有格子状态如图d所示,则第天所有格子全部被感染。
(2)
实现上述功能程序代码如下,完善划线处语句。
Dim
a(1 To 100) As Integer '存放格子状态
Dim
b(1 To 100) As Integer '辅助作用
Dim
zc(1 To 10000) As Integer '记录每一天的正常格子数
Dim
n As Integer '存放矩阵规模
Private
Sub Command1_Click()
Dim i As Integer, j As Integer, s As String
List1.Clear
n = Val(Text1.Text)
For i = 1 To n
s =
""
For j = 1 To n
a((i - 1) * n + j) = Int(Rnd() * 2)
s = s + Str(a((i - 1) * n + j))
If a((i - 1) * n + j) = 0 Then
Next j
List1.AddItem
s
Next i
End
Sub
Private
Sub Command2_Click()
Dim i As Integer, j As Integer, tian As
Integer, flag As Boolean
List2.Clear
'下面代码实现病毒传染过程
tian = 1: flag = False
Do While zc(tian) > 0
tian = tian + 1
For i = 1 To n * n
If
a(i) = 0 Then
If Then b(i) = tian
Else
b(i) = a(i)
End If
Next
i
For i = 1 To n * n
If
b(i) = 0 Then zc(tian) = zc(tian) + 1
a(i) = b(i)
Next i
If Then flag = True: Exit Do
Loop
'在List2中输出所有格子的最终状态,代码略。
If flag Then
Label2.Caption = "不会被全部感染"
Else
Label2.Caption = "第" + Str(tian) + "天全部被感染"
End If
End
Sub
'Judge函数用来判断第i行第j列的格子周围的异常格子数是否超过半数,超过半数返回True
Function
Judge(i As Integer, j As Integer) As Boolean
'代码略
End
Function
答案: 【1】2
【1】zc(1)=zc(1)+1【2】Judge((i-1)\n+1,(i-1) Mod n+1)【3】zc(tian)=zc(tian-1)