(2)请根据题意将下列程序补充完整。
Private Sub Command1_Click()
Dim m As String,tmp As String,ch As Strin
Dim s As String,i As Integer
m=Text1.Text
tmp=""
s=""
For i=1 To Len(m)
ch=Mid(m,i,1)
If ch>="0"And ch <="9" Then
Else If tmp<>"" Then
s=s+tmp+","
End If
Next i
Text2.Text=s
End Sub(3)输入的文本信息如图a所示,若删除加框处代码,则文本框Text2中显示的内容为
① 用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。
4 | 1 | 5 | 2 | 3 | a(1)~a(n)中存储第一个分配方案 |
2 | 3 | 4 | 5 | 1 | a(n+1)~a(2*n)中存储第二个分配方案 |
图a
②分配方案的形成方法: 将1~n之间的随机数字依次放到第1个位置、第2个位置……,随机数不能与位置号相同,并且要防止分配冲突,如前三个分配序号是“2 3 4”,那么在第4位上只能放“5”(如放“1”会导致第5个位置没有符合要求的数字,因此位置n-1需要判断数“n”是否已经分配,如果未分配,位置n-1放置数“n”),最终方案“2 3 4 5 1”。③评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。如第16题图a第3行上的数据“5 1 2 3 4”不符合要求,因为会使第2号选手重复拿到1号作品。
小明依据上述方法设计了VB程序,功能如下:在文本框Text1和Text2分别输入参赛人数和每人打分的作品数量,单击“分配”按钮Command1,在列表框List1中输出结果。程序运行效果如图b所示。
请回答下列问题:
(1)n=5,m=3,a(1)~a(10)中的数据如图a所示,a(11)~a(15)的数据可能是 (单选,填字母:A.5 4 3 1 2/B.5 4 1 3 2/C.3 4 5 1 2)
(2)请在划线处填入合适的代码。
Dim n As Integer '总人数/总作品数
Dim m As Integer '每人分配篇数
Dim a(1 To 500) As Integer '数组a大小满足处理要求
Dim c(1 To 100) As Integer '数组c大小满足处理要求
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer
n = Val(Text1.Text): m = Val(Text2.Text)
Randomize
i = 1
Do While i <= m
For j = 1 To n
c(j) = 0 '本轮分配方案中还没有数字j, c(j)=0,否则c(j)=1
Next j
For j = 1 To n
If j = n - 1 And c(n) = 0 Then
①Else
k = r(n, j)
End If
a((i - 1) * n + j) = k '分配数字k到当前方案的第j个位置上
c(k) = 1
Next j
If ② Then i = i + 1Loop
s = ""
For i = 1 To n
s = "参赛者" & i & ":"
For j = 1 To m
s = s + Str(a((j - 1) * n + i))+ ","
Next j
List1.AddItem s
s = ""
Next i
End Sub
Function r(x As Integer, y As Integer) As Integer
'生成一个取值在[1,x]之间,可以放在y位置上的随机数,满足条件r<>y andc(r)=0
End Function
Function check(c As Integer) As Boolean
'本轮方案和前面几次的分配方案比较,如果有人分到了重复作品,返回FALSE
Dim p As Integer,f As Boolean
f = True
p = 1
For i = 1 To c * n
If ③ Thenf = False: Exit For
End If
p = p mod n +1
Next i
check = f
End Function
甲 | 乙 | 丙 | 丁 | 戊 | 己 | |
甲 | 0 | 1 | 1 | 1 | 0 | 0 |
乙 | 1 | 0 | 1 | 0 | 1 | 1 |
丙 | 1 | 1 | 0 | 1 | 0 | 0 |
丁 | 1 | 0 | 1 | 0 | 1 | 1 |
戊 | 0 | 1 | 0 | 1 | 0 | 0 |
己 | 0 | 1 | 0 | 1 | 0 | 0 |
王老师设计了一个用来求两个陌生人建立联系所需最少介绍人的VB程序,程序运行时,点击“生成矩阵”按钮Command1,随机产生一个关系矩阵,并在列表框List1中显示。在文本框Text1和Text2中输入两个陌生人的编号,点击“建立联系”按钮Command2,在Labell中输出需要介绍人的最少个数。VB程序运行界面如图所示。
对陌生人pl和p2建立联系的方法:
①pl所在行开始,将其认识的人依次添加到联系人数组b中。
②若数组b中未出现p2,依次搜索下一位联系人所在行,将新出现的认识人添加到联系人数组b中。
③在搜索过程中同时记录搜索步数,数组b内全部搜索完毕,若p2还是未出现,则视为无法建立联系,反之输出介绍人的个数。
程序代码如下:
Const n=8
Dim a(1 To n*n) As Integer
Private Sub Command1_Click()
Dim s As String
List1.Clear
For i=1 To n
For j=i To n
If j=i Then
a((i-1)*n+j)=0
Else
a((i-1)*n+j) = Int(Rnd * 2)
End If
Next j
Next i
For i=1 To n
s=""
For j=1 To n
s=s+Str(((i-1)*n+j))
Next j
List1.AddItem s
Next i
End Sub
Private Sub Command2_Click()
Dim b(1To n) As Integer
Dim ren(1To n) As Integer '记录建立联系的步数
Dim find(1To n) As Boolean '记录某人是否被添加到联系人数组中
Dim p1 As Integer,p2 As Integer,cur As Integer,k As Integer,
q As Integer
p1=Val(Text1.xt)
p2=Val(Text2.Text)
cur=p1:k=1:q=0
find(cur)=True
Do While find(p)=False
For i=1 To n
If a( (cur-1)*n+i)=1 And find(i)=False Then
b(k)=i:k=k+1
find(i)=True
End If
Next i
q=q+1
If q=k Then Exit Do Else
Loop
If find(p2)=True Then
Label1.Caption="需要"+Str(ren(p2)-1)+"个介绍人"
Else
Label1.Caption="无法建立联系"
End If
End Sub
请回答以下问题:
(1)如图所示的人际关系,要建立2号和5号之间的联系需要的介绍人数最少为
(2)请在划线处填入合适的代码。
组卷网是一个信息分享及获取的平台,不能确保所有知识产权权属清晰,如您发现相关试题侵犯您的合法权益,请联系组卷网