题目

在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对m篇作品进行打分(本人作品回避),方法如下: ① 用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。 ②分配方案的形成方法: 将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 + 1   Loop   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   ③     Then       f = False: Exit For     End If     p = p mod n +1   Next i   check = f End Function ① ② ③  答案: 【1】B 【1】k= n【2】check(i - 1)【3】a(i) = a(c * n + p)
信息技术 试题推荐
最近更新