当前位置: 高中信息技术 / 综合题
  • 1. (2022高三下·浙江开学考) 某选考技术的班级组织班会活动,想把全班所有同学分配到若干个小组进行答题比赛。每个同学都有一个能力值(且能力值为大于0的整数),同个小组的同学能力值必须连续,并且同个小组成员能力值不能重复。例如:[1,2,3]是合法的分组方案,因为能力值连续:[1,2,5]不是合法的分组方案,因为能力值不连续:[1,1,2]同样不是合法的分组方案,因为出现了两个能力值为1的选手。如果有小组内人数太大少,就会因为时间不够而无法获得高分,给出一个合理的分组方案,满足所有人都恰好只分到一个小组,并且使得人数最少的组人数最多。

    例如能力值分别为“1,2,2,3,4,5”进行分组,分成两种方案:

    方案一,可以分(2)和(1,2,3,4,5)两组:

    方案二,可以分(1,2)和(2,3,4,5)两组:

    可见,方案二分组中人数最少的组人数更多,因此该方案更优。根据上述要求编写VB程序,程序运行界面如16题图所示。

    1. (1) 若班级里有6名同学,能力值分别为1,2,2,3,3,4,则分组后最少的组人数为
    2. (2) 编写VB程序实现上述功能,代码如下,请在划线处填入合适的代码。

      Private Sub Command1 Click()

        Dim a(1000) As Integer, q(1000) As Integer

        Dim top As Integer '表示分组数量

        Dim sum(000 As Integer '存储每组的人数

        ‘初始化得到n位同学的能力值,分别存储在a(1)-a(n)中,并升序排序,代码略

        top=0

        For k= 1To n

          i=0:j =top

          Do While i< j

             m=(i+j+1)\2

              If q(m)<=a(k) Then

                

             Else

                j=m-1

              End If

          Loop

          If q(i) <> a(k) Then

              top=top+1

              sum(top) = 1

             

          Else

               sum(i) = sum(i) + 1

            

          End If

        Next k

        ans = sum(1)

        For k= 2 To top

              If sum(k) < ans Then ans = sum(k)

        Next k

        Label1. Caption = “人数最少的一组人数最多为” + Str (ans)

      End Sub

微信扫码预览、分享更方便