|
学生考试随机混排考场(不按成绩),每场30人,考试号301260001-301262000,要求同班学生不出现连号。
原始数据(部分):
学号 | 总分 | 班级 | 考场 | 23325 | 549.5 | 33 | 01 | 23737 | 512.5 | 37 | 01 | 21145 | 488 | 11 | 01 | 24013 | 604 | 40 | 01 | 20953 | 576 | 9 | 01 | 21048 | 470 | 10 | 01 | 23925 | 496.5 | 39 | 01 | 21745 | 534 | 17 | 01 | 21925 | 557 | 19 | 01 | 23153 | 571 | 31 | 01 | 23102 | 688 | 31 | 01 | 23735 | 540 | 37 | 01 | 21738 | 543.5 | 17 | 01 | 21718 | 522.5 | 17 | 01 | 21952 | 415.5 | 19 | 01 | 23147 | 540.5 | 31 | 01 | 23911 | 472 | 39 | 01 | 21001 | 570.5 | 10 | 01 | 21324 | 551.5 | 13 | 01 | 23948 | 395.5 | 39 | 01 | 21331 | 550.5 | 13 | 01 | 24031 | 507 | 40 | 01 | 21911 | 567 | 19 | 01 | 23721 | 450.5 | 37 | 01 | 23256 | 404.5 | 32 | 01 | 20950 | 577 | 9 | 01 | 21019 | 569.5 | 10 | 01 | 23157 | 445 | 31 | 01 | 23954 | 442.5 | 39 | 01 | 21744 | 513.5 | 17 | 01 | 21327 | 538 | 13 | 02 | 24040 | 509.5 | 40 | 02 | 23355 | 501.5 | 33 | 02 | 23335 | 511.5 | 33 | 02 | 21521 | 543 | 15 | 02 | 23213 | 503.5 | 32 | 02 | 21901 | 599.5 | 19 | 02 | 23927 | 525.5 | 39 | 02 | 23536 | 418.5 | 35 | 02 | 23118 | 603 | 31 | 02 | 23930 | 574.5 | 39 | 02 | 23724 | 574.5 | 37 | 02 | 21949 | 541 | 19 | 02 | 23544 | 505 | 35 | 02 | 21333 | 593.5 | 13 | 02 | 21344 | 460 | 13 | 02 | 21907 | 604.5 | 19 | 02 | 23247 | 475 | 32 | 02 | 21036 | 502 | 10 | 02 | 23534 | 544 | 35 | 02 | 21023 | 617 | 10 | 02 | 23532 | 480.5 | 35 | 02 | 21524 | 554 | 15 | 02 | 23757 | 425 | 37 | 02 | 23342 | 449.5 | 33 | 02 | 23527 | 515.5 | 35 | 02 | 21525 | 575 | 15 | 02 | 21120 | 532.5 | 11 | 02 | 21526 | 559.5 | 15 | 02 | 23243 | 439.5 | 32 | 02 | 24030 | 453 | 40 | 03 | 23704 | 577.5 | 37 | 03 | 21014 | 591 | 10 | 03 | 21931 | 564.5 | 19 | 03 | 23511 | 584.5 | 35 | 03 | 23343 | 474 | 33 | 03 | 21716 | 536 | 17 | 03 | 23953 | 437.5 | 39 | 03 | 23214 | 541 | 32 | 03 | 23941 | 428 | 39 | 03 | 21043 | 532.5 | 10 | 03 | 23107 | 633 | 31 | 03 | 21058 | 384.5 | 10 | 03 | 23553 | 465 | 35 | 03 | 23253 | 446 | 32 | 03 | 20941 | 597.5 | 9 | 03 | 24047 | 436.5 | 40 | 03 | 23513 | 589.5 | 35 | 03 | 23323 | 518.5 | 33 | 03 | 21515 | 611.5 | 15 | 03 | 20902 | 672.5 | 9 | 03 | 23510 | 539 | 35 | 03 | 20956 | 548.5 | 9 | 03 | 21703 | 580 | 17 | 03 | 20924 | 655.5 | 9 | 03 | 23133 | 604 | 31 | 03 | 23528 | 474 | 35 | 03 | 21748 | 474 | 17 | 03 | 23736 | 439 | 37 | 03 | 23146 | 558.5 | 31 | 03 |
- Sub tt()
- Set d = CreateObject("scripting.dictionary")
- rs = 2000
- ReDim arr(1 To rs, 1 To 2)
- k = Int(rs / 30) + 1 '考场个数
- For p = 1 To k - 1 '针对每个考场
- For i = 1 To 30 '选30人
- aa: x = Int((rs * Rnd) + 1) '任选一人
- If d(x) = 0 And d(x - 1) <> p And d(x + 1) <> p Then '如果此人未选过,或此人前后号不在此考场中
- d(x) = p '选中此人,并作标记
- arr(x, 1) = x '此人考号
- arr(x, 2) = p '此人考场
- Else '否则重新选人
- GoTo aa
- End If
- Next
- Next
- For i = 1 To rs '剩下的人进最后一个考场
- If d(i) = 0 Then arr(i, 1) = i: arr(i, 2) = p
- If d(i - 1) = p Or d(i + 1) = p Then Call tt '如果最后一个考场有连号,重新执行程序
- Next
- [a2].Resize(rs, 2).ClearContents '显示结果
- [a2].Resize(rs, 2) = arr
- End Sub
复制代码
|
|