我要实现这样的功能:有一组数据,X1、X2、X3……Xn,去掉一个最大数,去掉一个最小数,再把剩余的数求平均数得到数Y,请问怎样实现这样的功能?另,如果已知这个数Y,随机产生一组数据X1、X2、X3……Xn且满足上述要求,又该怎么实现?谢谢~!~

解决方案 »

  1.   

    1: 大概代码
    dim xMax as integer
    dim xMin as integer
    dim xTotal as integer
    dim i as integer
    dim n as integer  '数组个数
    n=100
    xMax=x(1)
    xMin=x(1)
    xTotal=0
    for i=1 to n 
     if x(i)>xMax then
      xMax=x(i)
     end if
     if x(i)<xMin then
      xMin=x(i)
     end if
     xtotal=xTotal+x(i)
    next i
    debug.print "Max:" & xMax
    debug.print "Min:" & xMin
    debug.print "Avg:" & (xTotal-xMax-Xmin)/(100-2)2。答案有无数种
      

  2.   

    1
    利用一个 Sorted = True 的 ListBox:
    List1.Clear
    For i = 0 To Ubound(x)
        List1.AddItem Format(x(i), "0#.00")
    Next i
    List1.RemoveItem List1.ListCount - 1  '去掉最大值
    List1.RemoveItem 0                      '去掉最小值For i = 0 To List1.ListCount - 1
       Tmp = Tmp + Val(List1.List(i))
    Next i
    MsgBox Format(Tmp / List1.ListCount, "Standard")2
    逆向模拟:
    Dim sngMax As Single
    Dim sngMin As Single
    Dim sngAvg As Single
    Dim n As IntegersngMax = InputBox("请输入最大值")
    sngMin = InputBox("请输入最小值")
    If sngMin >= sngMax Then
        MsgBox "最小值大于等于最大值!", vbOkOnly, "错误"
        Exit Sub
    End IfsngAvg = InputBox("请输入平均值")
    If sngAvg <= sngMin Or ngAvg >= sngMax Then
        MsgBox "平均值小于等于最小值,或大于等于最大值!", vbOkOnly, "错误"
        Exit Sub
    End Ifn = InputBox("请输入数值个数")sum = sngAvg * (n - 2)
    sum = sum + sngMax + sngMinReDo:
    Redim x(n - 1)
    Randomize
    For i = n - 1 To 2 Step -1
       x(i) = sngMin + Rnd() * (sngMax - sngMin)
       sum = sum - x(i)   If sum < i * sngMin Or sum > i * sngMax Then Goto ReDo
       If i = 1 Then x(i) = sum
    End If
    x(1) = sngMin
    x(0) = sngMax此后做一下乱序即可。
      

  3.   

    第一个问题我在EXCEL里实现了;第二个问题,如果是去掉三个最大值和三个最小值呢?其余条件不变,谢谢