ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 小花鹿

[讨论] 小花鹿学习VBA记录

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-17 15:10 | 显示全部楼层
请香川老师指导:
关于考场安排的问题,所有情况都在附件中做了说明。
小学升学考试座位表.rar (13.14 KB, 下载次数: 35)


TA的精华主题

TA的得分主题

发表于 2013-5-17 16:53 | 显示全部楼层
小花鹿 发表于 2013-5-17 15:10
请香川老师指导:
关于考场安排的问题,所有情况都在附件中做了说明。

考场问题,要点(难点)如下:

1. 每个学生的前后左右不能有同校的学生。

那么,如果考虑复杂一点的话,
应该是前、后、左、右、以及左前、左后、右前、右后一共8个位置要排除同校。


2、最好是各校的学生比较均匀的分布在各个考场中。

因此,要满足这样两个条件,原问题帖中【张三李四】推荐的【斜线不相邻排列法】就有问题了。


呵呵。

但是,如果同时还要求算法简单的话,就很难做到了。
算法简单的话,还是用斜线矩阵排列法简单。因为斜线排列是有现出代码的。


如果只考虑均匀随机分班,并保证前后左右8个位置都没有同校学生的话,
我可以写个一次性完成的算法代码,但算法会稍复杂一些。



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-17 17:18 | 显示全部楼层
本帖最后由 小花鹿 于 2013-5-17 17:50 编辑
香川群子 发表于 2013-5-17 16:53
考场问题,要点(难点)如下:

1. 每个学生的前后左右不能有同校的学生。


如果只考虑均匀随机分班,并保证前后左右8个位置都没有同校学生的话,
我可以写个一次性完成的算法代码,但算法会稍复杂一些。

就这个要求已经很好了,谢谢。

谢谢你22楼那个文件列表的帖子,它对我的影响可是相当的大,使我对FSO和递归有了实质性的认识,要是没有这个切入点,我可能需要很慢长的时间。
有个老师指导就是好,呵呵。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-18 00:49 | 显示全部楼层
香川群子 发表于 2013-5-17 16:53
考场问题,要点(难点)如下:

1. 每个学生的前后左右不能有同校的学生。

算法简单的话,还是用斜线矩阵排列法简单。因为斜线排列是有现出代码的。

如果只考虑均匀随机分班,并保证前后左右8个位置都没有同校学生的话,
我可以写个一次性完成的算法代码,但算法会稍复杂一些。

上面两个我都想要,谢谢。
我想先分析第一个,然后再分析第二个。

TA的精华主题

TA的得分主题

发表于 2013-5-18 08:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
小花鹿 发表于 2013-5-18 00:49
算法简单的话,还是用斜线矩阵排列法简单。因为斜线排列是有现出代码的。

如果只考虑均匀随机分班,并 ...

看了排座位的实际例子,发现一共才5个不同的学校,且人数最多的学校已占考生数量的43%

因此,只能保证前后左右没有同校,无法保证全部8个方位都不同校。

按此条件,简单分析一下:
人数最多的学校 设为 A,则最小单位可以定为4个人一组:
A  B    或  A   B  或  A  B
B  A          C   A        C  D

类似这样的组可以不断重复,且满足前后左右都不同校的最低要求。


如果排成二维数组,假设人数最多的学校A(人数不能超过50%)
那么必须优先排入A以保证前后左右不相同,且应该按照如下模式:
按7行6列 40人有效排列如下:(以1代表排入A校生,其余为0可任意排入其它学校)
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
- 0 1 0 1 -

你会发现,这样的数组中,每一行中0、1是交替出现的,很有规律……
但为了保证相邻不同,每一行末尾和下一行首位却是相同的……

但很快我发现如下规律:
如果定义一个数组 Redim zwb(hs,ls)
即 定义 座位表(行数,列数),由于下标从0开始,就多了一行、一列,
于是就可以得到0、1交替的效果了。
-  -  -  -  -  -  - 多了第0行可以不用,多了第0列则非常有用。
0 1 0 1 0 1 0
1 0 1 0 1 0 1
0 1 0 1 0 1 0
1 0 1 0 1 0 1
0 1 0 1 0 1 0
1 0 1 0 1 0 1
0 - 0 1 0 1 -

呵呵,这样一来,问题就转换成:
首先把人数多的A学校学生打乱以后,按0、1交替的位置顺序排入座位表中1的位置,
然后,余下的空位0则可以任意排入其它学校,就足够满足前后左右不同校的要求了。

这个可能比斜排法更简单吧。

点评

能不能随机抽取,也就是某个座位上是哪个学生是随机的。当然还要保证前后左右不同校。  发表于 2013-5-18 19:01
有道理。等代码。代码最好能通用(就是能考虑各种极端的情况)。  发表于 2013-5-18 18:24

TA的精华主题

TA的得分主题

发表于 2013-5-18 22:00 | 显示全部楼层
完全按照随机抽取原理的代码写好了。

请看附件。

代码已经做了较为详细的注释,你自已先看一下,不懂的再问吧。

小学升学考试座位表2.rar

25.34 KB, 下载次数: 45

点评

谢谢,我要花时间研究一下,我是想把此类问题象围棋一样做成一个定势。  发表于 2013-5-18 22:39

TA的精华主题

TA的得分主题

发表于 2013-5-18 22:04 | 显示全部楼层
依次从上到下、从左到右的顺序进行随机抽取,
检查比对时,其实只要比对前一行和左一列是否有同校即可。

并不需要检查上下左右 4的方位。(因为每次放入新位置时,右侧和下方还是空的位置。)

  1. Sub kagawa()
  2.     Randomize
  3.     Application.ScreenUpdating = False
  4. '    Dim i%, j%, k%, m%, n%, hs%, ls%, h%, l%, xm$, p#, r%, t$, rc%, tms# '目前这些变量定义了对速度没太大影响
  5. '    Dim arr, s, x, y, xx, rs, xh, d_rs, d_xh '这些变量都不需要定义 也不会影响速度的
  6.     tms = Timer
  7.    
  8.     p = [p1] '这是解决死循环的参数设定。设定数值>=10就几乎不会出现死循环
  9.              '而如果设定数值<3时
  10.    
  11.     m = [a1].End(4).Row - 1 '取数据有效[行数m]
  12. Redo:
  13.     [c2].Resize(m, 2) = "" '清空考场号、座位号信息
  14.     arr = [a2].Resize(m, 6) '获取原始数据到[数组arr]
  15.    
  16.     Set d_rs = CreateObject("Scripting.Dictionary") '统计各学校人数字典[d_rs]
  17.     Set d_xh = CreateObject("Scripting.Dictionary") '序号信息查询字典[d_xh]
  18.    
  19.     For i = 1 To m
  20.         d_rs(arr(i, 1)) = d_rs(arr(i, 1)) + 1 '以学校为关键字统计人数
  21.         d_xh(CStr(i)) = i & " " & arr(i, 1) '以序号+学校名作为关键字存储学生信息
  22.     Next
  23.    
  24.     hs = 7: ls = 6 '设定考场座位表信息 [行数hs]=7、[列数ls]=6
  25.     [l2].Resize(m, ls) = "" '清空输出区域
  26.     For i = 0 To (m - 1) \ 40 '遍历考场数[按每个考场40人]
  27.         ReDim x(hs, ls)  '检查校名的二维座位表[数组x]初始化
  28.         ReDim y(1 To hs, 1 To ls)  '记录结果的二维座位表[数组y]初始化
  29.         k = 0 '记录结果[序号k]
  30.         For h = 1 To hs '遍历各行
  31.             For l = 1 To ls '遍历各列
  32.                 If h = hs And (l = 1 Or l = ls) Then
  33.                     '排除第7行中 首列和最后列(按楼主指定格式)
  34.                 Else
  35.                     s = d_xh.items '更新剩余学生信息清单[数组s]
  36.                     t = "" '学校名检查临时[变量t]初始化
  37.                     
  38.                     rs = d_rs.items '更新剩余学生人数[数组rs]
  39.                     n = Application.Max(rs) '查询各个学校剩余[最多人数n]
  40.                     If n / (1 + UBound(s)) > p Then '如果该学校剩余人数占全部剩余人数的一定比例就可以提前指定了。
  41.                         '这里的[比例p]设定范围应为[0-0.5]。具体数值设多少也很有意思。
  42.                         '设定p为0.3-0.5时比较容易出现死循环。
  43.                         '如果设定为p=0.1即10%时,则几乎没有死循环了。
  44.                         
  45.                         xx = d_rs.keys '更新剩余学校名[学校数组xx]
  46.                         t = xx(Application.Match(n, rs, 0) - 1) '然后返回最多剩余人数对应学校名到[变量t]
  47.                         If t <> x(h - 1, l) And t <> x(h, l - 1) Then
  48.                             '如果[前方] 和 [左方]都不是同校则可以确定下一步优先提取该学校学生
  49.                             s = Filter(s, t, True)
  50.                         Else
  51.                             t = "" '反之如果[前方] 或 [左方]已经有同校,则不可指定该学校
  52.                         End If
  53.                     End If
  54.                     If t = "" Then '如果[t变量]为空,则表明没有指定学校,那么进行下面的检查比对
  55.                         t = x(h - 1, l): If t <> "" Then s = Filter(s, t, False) '排除前方同校
  56.                         t = x(h, l - 1): If t <> "" Then s = Filter(s, t, False) '排除左方同校
  57.                     End If
  58.                     If UBound(s) = -1 Then rc = rc + 1: GoTo Redo
  59.                     '如果排除以后没有不同学校可供选择则将进入死循环,于是需要从头开始重试一次。
  60.                     '目前确认是大约7-8次左右会有一次死循环
  61.                     '可以在这个阶段用交换法进行改进,但代码也很复杂……所以还是选择Redo
  62.                     
  63.                     '如果没有问题,那么以下在筛选后的剩余学校学生中随机一名学生抽取即可
  64.                     r = Int(Rnd * (UBound(s) + 1)) '随机抽取数组s中[位置r]的学生
  65.                     
  66.                     xh = Split(s(r))(0) '提取[序号xh]
  67.                     d_xh.Remove (xh) '并更新字典(删去该序号)
  68.                     
  69.                     xm = Split(s(r))(1) '提取[校名xm]
  70.                     If d_rs(xm) = 1 Then d_rs.Remove (xm) Else d_rs(xm) = d_rs(xm) - 1 '并更新字典(减去人数或删去该学校)
  71.                
  72.                     x(h, l) = xm '记录该位置的学校名到检查校名的二维座位表[数组x]中
  73.                     y(h, l) = xm & Chr(10) & arr(xh, 2) & " " & arr(xh, 4) '记录结果到二维座位表[数组y]
  74.                     
  75.                     arr(xh, 3) = "考场" & Right("0" & i + 1, 2) '考场号记录到[数组arr]中
  76.                     k = k + 1: arr(xh, 4) = "座位" & Right("0" & k, 2) & " (" & h & "行" & l & "列)" '座位号记录到[数组arr]中
  77.                     
  78.                     If d_xh.Count = 0 Then GoTo Ext '全部学生座位排列完成后退出循环
  79.                 End If
  80.             Next
  81.         Next
  82. Ext:
  83.         [l65536].End(3).Offset(3).Resize(hs, ls) = y '输出二维座位表信息
  84.     Next
  85.    
  86.     [m1] = [m1] + 1 '代码累计运行次数
  87.     If rc Then [n1] = [n1] + 1 '死循环发生累计次数
  88.     [a2].Resize(m, 6) = arr '输出座位表信息到原始数据表
  89.     Application.ScreenUpdating = True
  90.     MsgBox Format(Timer - tms, "0.0000s ") & IIf(rc, rc & " 次死循环", "") '代码运行时间
  91.    
  92. End Sub
复制代码

点评

太复杂了,一晚上了分析了还不到一半,慢慢研究。给个最简单的,只要前后左右不同校就行。  发表于 2013-5-19 00:56

TA的精华主题

TA的得分主题

发表于 2013-5-20 05:45 | 显示全部楼层
分两组然后交替插入的算法,刚写了个框架,代码有待完善。

小学升学考试座位表.rar

22.59 KB, 下载次数: 30

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-20 13:03 | 显示全部楼层
本帖最后由 小花鹿 于 2013-5-23 13:00 编辑
香川群子 发表于 2013-5-18 22:04
依次从上到下、从左到右的顺序进行随机抽取,
检查比对时,其实只要比对前一行和左一列是否有同校即可。
...


你的代码很复杂,检查校名的二维座位表和FILTER用得都很巧妙,我现在基本懂点了,不知以后能不能灵活运用。
比葫芦画瓢写了一个代码:
小学升学考试座位表.rar (21.16 KB, 下载次数: 19)

Sub kaochang()
Randomize
Dim ar, drs, dxh, i&, Hs&, Ls&, H&, L&, xmb, zwb, drsi, xh, xm, tm, M, drsk, n, r&, s
Set drs = CreateObject("Scripting.Dictionary") '记录各校人数
Set dxh = CreateObject("Scripting.Dictionary") '记录序号&学校
Sheet3.Columns("h:m").ClearContents
'redo:
ar = Sheet3.[a1].CurrentRegion
For i = 2 To UBound(ar)
    drs(ar(i, 1)) = drs(ar(i, 1)) + 1
    dxh(CStr(i)) = i & " " & ar(i, 1)
Next i
Hs = 7: Ls = 6 '考场7行6列
For i = 0 To (UBound(ar) - 2) / 40 '减2是因为其中1个是表头,这里是93人,93/40=2.325,0-2.325是3个考场,如果是80个人80/40=2,0-2也是3个考场,就不对了,所以(80-1)/40=1.975,是2个考场
    ReDim xmb(Hs, Ls) '初始化记录校名的数组,这个数组的使用很巧妙
    ReDim zwb(1 To Hs, 1 To Ls) '初始化记录座位的数组
    For H = 1 To Hs '遍历考场的各行
        For L = 1 To Ls '遍历考场的各列
            If H = Hs And (L = 1 Or L = Ls) Then '考场的下面两个角
                '不做任何操作
            Else
                s = dxh.items '序号&学校 数据更新
                tm = "" '学校名清空
                drsi = drs.items '学校人数更新
                M = Application.Max(drsi) '查找学校人数最多的
                n = Application.Match(M, drsi, 0) '最多人数位置
                drsk = drs.keys '取得各学校名
                tm = drsk(n - 1) '最多人数对应的学校
                If tm <> xmb(H - 1, L) And tm <> xmb(H, L - 1) Then '前面、左面没有同校
                    s = Filter(s, tm, True) '过虑出该校清单
                Else
                    tm = "" '不选择该校
                End If
                If tm = "" Then
                    tm = xmb(H - 1, L): If tm <> "" Then s = Filter(s, xmb(H - 1, L), False) '去掉前面的学校的学生
                    tm = xmb(H, L - 1): If tm <> "" Then s = Filter(s, xmb(H, L - 1), False) '去掉左面的学校的学生
                End If
                'If UBound(s) = -1 Then GoTo redo
                r = Int(Rnd() * (UBound(s) + 1)) '在过虑后得到的清单中随机抽取1个
                xh = Split(s(r), " ")(0) '取得序号
                dxh.Remove xh '此人已抽出,从字典中去掉
                xm = Split(s(r), " ")(1) '得到校名
                xmb(H, L) = xm '记到学校检查表(数组)中,便于后面检查是否有同校
                zwb(H, L) = xm & ar(xh, 4) '记入输出考场表中(数组),zwb(座位表)
                If drs(xm) = 1 Then drs.Remove (xm) Else drs(xm) = drs(xm) - 1 '如果此校只剩1个学生,该生已被抽出,所以去掉该校,否则该校人数减1
                If dxh.Count = 0 Then GoTo over '字典空了,说明所有学生已被抽出,所以退出H、L循环
            End If
        Next L
    Next H
over:
    Sheet3.[h65536].End(3).Offset(3).Resize(Hs, Ls) = zwb
Next i
End Sub

现在有2个问题请教:
1、我没用你所说的死循环参数,似乎运行起来也没什么问题,不用可以吗?
2、我上面的代码专门注释掉了两句,'redo: 和 'If UBound(s) = -1 Then GoTo redo ,这样会出错,原因是Ubound(s)=-1,我的理解是s中没有学生,那么,为什么有时会出现s中没有学生的情况呢?


定下一个模型,以后就用这个模型了,优点是代码简单点,缺点是人数在各考场中分布不均匀:
小学升学考试座位表1.rar (26.51 KB, 下载次数: 27)
Sub test2()
Randomize
Dim ar, br(), drs, dxh, i&, Hs&, Ls&, xmb(), zwb(), H&, L&, s, M, tm, drsk, r&, xh, xm
Set drs = CreateObject("scripting.dictionary")
Set dxh = CreateObject("scripting.dictionary")
ar = Sheet3.[a1].CurrentRegion
redo:
ReDim br(2 To UBound(ar), 1 To 2)
Sheet3.Columns("h:m").ClearContents
Sheet3.[e2:f999].ClearContents
For i = 2 To UBound(ar)
    drs(ar(i, 1)) = drs(ar(i, 1)) + 1
    dxh(CStr(i)) = i & " " & ar(i, 1)
Next i
Hs = 7: Ls = 6
For i = 0 To (UBound(ar) - 2) / 40
    ReDim xmb(Hs, Ls)
    ReDim zwb(1 To Hs, 1 To Ls)
    For H = 1 To Hs
        For L = 1 To Ls
            If H = Hs And (L = 1 Or L = Ls) Then
            Else
                s = dxh.items
                M = Application.Max(drs.items)
                M = Application.Match(M, drs.items, 0)
                drsk = drs.keys
                tm = drsk(M - 1)
                If tm <> xmb(H - 1, L) And tm <> xmb(H, L - 1) Then
                    s = Filter(s, tm, True)
                Else
                    tm = xmb(H - 1, L): If tm <> "" Then s = Filter(s, tm, False)
                    tm = xmb(H, L - 1): If tm <> "" Then s = Filter(s, tm, False)
                End If
                If UBound(s) = -1 Then GoTo redo
                r = Int(Rnd() * (UBound(s) + 1))
                xh = Split(s(r), " ")(0)
                dxh.Remove (xh)
                xm = Split(s(r), " ")(1)
                xmb(H, L) = xm
                zwb(H, L) = xm & ar(xh, 4)
                br(xh, 1) = i + 1: br(xh, 2) = H & "行" & L & "列"
                If drs(xm) = 1 Then drs.Remove (xm) Else drs(xm) = drs(xm) - 1
                If dxh.Count = 0 Then GoTo ext
            End If
        Next L
    Next H
ext:
    Sheet3.[h65536].End(3).Offset(3).Resize(Hs, Ls) = zwb
Next i
Sheet3.[e2].Resize(UBound(br) - 1, 2) = br
End Sub

Sub test2() '考虑了某校人数大于总人数一半的情况,肯定出现空位
Randomize
Dim ar, br(), drs, dxh, i&, Hs&, Ls&, xmb(), zwb(), H&, L&, s, s1, s2, M, tm, drsk, r&, xh, xm, Mx, Mz, Mw
Set drs = CreateObject("scripting.dictionary")
Set dxh = CreateObject("scripting.dictionary")
ar = Sheet3.[a1].CurrentRegion
redo:
ReDim br(2 To UBound(ar), 1 To 2)
Sheet3.Columns("h:m").ClearContents
Sheet3.[e2:f999].ClearContents
For i = 2 To UBound(ar)
    drs(ar(i, 1)) = drs(ar(i, 1)) + 1
    dxh(CStr(i)) = i & "," & ar(i, 1)
Next i
Hs = 7: Ls = 6
Mx = Application.Max(drs.items)
Mw = Application.Match(Mx, drs.items, 0)
drsk = drs.keys
tm = drsk(Mw - 1)
Mz = dxh.Count
If Mx <= Mz / 2 Then
    For i = 0 To (UBound(ar) - 2) / 40
        ReDim xmb(Hs, Ls)
        ReDim zwb(1 To Hs, 1 To Ls)
        For H = 1 To Hs
            For L = 1 To Ls
                If H = Hs And (L = 1 Or L = Ls) Then
                Else
                    s = dxh.items
                    M = Application.Max(drs.items)
                    M = Application.Match(M, drs.items, 0)
                    drsk = drs.keys
                    tm = drsk(M - 1)
                    If tm <> xmb(H - 1, L) And tm <> xmb(H, L - 1) Then
                        s = Filter(s, tm, True)
                    Else
                        tm = xmb(H - 1, L): If tm <> "" Then s = Filter(s, tm, False)
                        tm = xmb(H, L - 1): If tm <> "" Then s = Filter(s, tm, False)
                    End If
                    If UBound(s) = -1 Then GoTo redo
                    r = Int(Rnd() * (UBound(s) + 1))
                    xh = Split(s(r), ",")(0)
                    dxh.Remove (xh)
                    xm = Split(s(r), ",")(1)
                    xmb(H, L) = xm
                    zwb(H, L) = xm & ar(xh, 4)
                    br(xh, 1) = i + 1: br(xh, 2) = H & "行" & L & "列"
                    If drs(xm) = 1 Then drs.Remove (xm) Else drs(xm) = drs(xm) - 1
                    If dxh.Count = 0 Then GoTo ext
                End If
            Next L
        Next H
ext:
        Sheet3.[h65536].End(3).Offset(3).Resize(Hs, Ls) = zwb
    Next i
    Sheet3.[e2].Resize(UBound(br) - 1, 2) = br
Else
    For i = 0 To (Mx - 1) / 20
        ReDim zwb(1 To Hs, 1 To Ls)
        For H = 1 To Hs
            For L = 1 To Ls Step 2
                If H = Hs And (L = 1 Or L = Ls) Then
                Else
                    
                    s = dxh.items: s1 = Filter(s, tm, True): s2 = Filter(s, tm, False)
                    If UBound(s1) <> -1 Then
                        r = Int(Rnd() * (UBound(s1) + 1))
                        xh = Split(s1(r), ",")(0)
                        dxh.Remove (xh)
                        zwb(H, L + ((H - 1) Mod 2)) = ar(xh, 1) & ar(xh, 4)
                    End If
                    If UBound(s2) <> -1 Then
                        r = Int(Rnd() * (UBound(s2) + 1))
                        xh = Split(s2(r), ",")(0)
                        dxh.Remove (xh)
                        zwb(H, L + (H Mod 2)) = ar(xh, 1) & ar(xh, 4)
                    End If
                End If
            Next L
        Next H
        zwb(7, 2) = zwb(7, 6): zwb(7, 6) = ""
        Sheet3.[h4].Offset(i * 9).Resize(Hs, Ls) = zwb
    Next i
End If
End Sub

TA的精华主题

TA的得分主题

发表于 2013-5-20 14:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你的代码看上去是没有用到【死循环参数】,但实际上还是用了,你的【死循环参数】是=0

解释:
因为你的代码去掉了if  n/(ubound(s)+1)>【死循环参数】then 的语句,而直接使用了后面的代码。
因此实际上相当于你是 if n/(ubound(s)+1)>0 then 这样子,即【死循环参数】=0


运行起来似乎也没什么问题,但是随机性会受到影响。
也就是说,人数最多的学校会被优先抽到,
因此第一考场中人数最多的学校将占最大比例……

就原始数据来说,运行结果:
黄村校 一开始20人最多,于是你的代码【稳定地】从20人中抽取到了12人剩余8人
这时候,其它15人的学校可能也会剩8人或9人了,于是才开始均衡地从所有学校中抽取学生……

因此,第一考场中,黄村校将比其它学校多5-6人。


而如果我设定参数=30%时,黄村校将仅比其它学校多抽取1-2人而已,差别不太大的。
也就是说随机性要好一点



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 11:39 , Processed in 0.050464 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表