当前位置: 高中信息技术 / 综合题
  • 1. (2021高三上·浙江月考) 某地区举办了一场比赛,共有n个选手参加,每个选手会有m个评委进行评分。现要求按下列规则计算每个选手的成绩,并按照成绩从高到低进行排序。

    选手成绩的计算规则是:计算评分最高前k个的平均分avg1,剩余评分的平均分avg2,找到avg1与avg2差值最小,则avg1与avg2的平均数为该选手得分。例如,某选手的评委评分为6,5,3,1,则各位次评分为:

    k

    1

    2

    3

    avg1

    6

    5.5

    4.67

    avg2

    3

    2

    1

    avg1-avg2

    3

    3.5

    3.67

    由表格可知,差值最小为3,因此该选手的评分为(6+3)/2=4.5。按上述要求,编写VB程序,功能如下:在列表框List1中显示各选手的评委评分,单击“计算”按钮Command1,在列表框List2中依次按照得分从高到低显示每位选手成绩。程序运行界面如图所示。请回答下列问题:

    1. (1) 若某选手的评委评分为6,3,7,10,则该选手最后成绩为
    2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

      Const n=8

      Const m=12

      Dim a(n*m)As Double,b(m)As Integer

      Dim f(n)As Double,num(n)As Integer,sum As Double

      Private Sub Form_Load()

          '读取n个人每个评委的评分,按照选手编号从小到大依次存入数组a,并显示在List1中

          'a(1)到a(m)存储第1个选手得到的m个评委的评分

          'a(m+1)到a(2*m)存储第2个选手得到的m个评委的评分

          '以此类推,代码略

      End Sub

      Private Sub Command1_Click()

          Dim i As Integer,j As Integer,x As Integer,k As Integer

          Dim s As Double,avg1AsDouble,avg2AsDouble

          Dim ans_v As Double,ans_c As Double

          For i=1 To n

              sum=0

              For j=1 To m

                  sum=sum+a((i-1)*m+j)

                  b(j)=0

              Next j

              s=0

              ans_v=-1:ans_c=0

              For j=1 To m-1

                  x=find(i)     '找到第i组中m个数中第j大数位置x

                 

                  avg1=s/j

                  avg2=(sum-s)/(m-j)

                  If ans_v=-1 Or avg1-avg2<ans_c Then

                      ans_v=(avg1+avg2)/2

                      ans_c=avg1-avg2

                  End If

              Next j

             

              Do While k>=1 And ans_v>f(k)

                  f(k+1)=f(k)

                  num(k+1)=num(k)

                  k=k-1

              Loop

              f(k+1)=ans_v

              num(k+1)=i

          Next i

          '将结果显示在List2中,代码略

      End Sub

      Function find(t As Integer)As Integer

          Dim i As Integer

          find=0

          For i=(t-1)*m+1 To t*m

              IfThen

                  If find=0 Or a(find)<a(i)Then find=i

              End If

          Next i

          b(find-(t-1)*m)=1

      End Function

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