ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教一个随机分组的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-30 15:36 | 显示全部楼层
完全按照楼主要求,直线思考的代码如下:

Sub test()
    Dim i&, i2&, j&, k&, m&, n&, r&, s&, t&, z&, tms#
   
    tms = Timer
    [a1].CurrentRegion.Interior.ColorIndex = 0
    [a1].CurrentRegion = ""
   
    m = 100 '取数范围m
    n = 50 '每组个数n
    s = 25 '相同个数s
    z = 3 '组数z
   
    ReDim a&(z, m), c&(z, m)
    For j = 1 To m
        a(0, j) = j
    Next
   
   
    For i = 1 To z '遍历组
        a(i, 0) = i
        For j = 1 To m
            a(i, j) = a(i - 1, j)
        Next
        
        Randomize
        For j = 1 To m '组个数
            Do
                k = k + 1
                r = Int(Rnd * (m - j + 1)) + j
                t = a(i, r): a(i, r) = a(i, j): a(i, j) = t
                If j > s Then
                    Exit Do
                Else
                    For i2 = 1 To i - 1
                       If c(i2, t) = 0 Then Exit For
                    Next
                    If i2 = i Then Exit Do
                End If
            Loop
            If j <= n Then c(i, t) = 1: c(0, t) = c(0, t) + 1
        Next
    Next
   
    [a1].Resize(z + 1, m + 1) = a
    For i = 1 To z
        For j = 1 To n
            If c(0, a(i, j)) = z Then Cells(i + 1, j + 1).Interior.ColorIndex = 7
        Next
    Next
    MsgBox Format(Timer - tms, "0.000s ") & k
End Sub

TA的精华主题

TA的得分主题

发表于 2018-9-30 23:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
集合运算
A ∪ B ∪ C = A+B+C -(A ∩ B +B ∩ C +C ∩ A)+A ∩ B ∩ C

代入条件
      100    >= 50 +50 +50 - (25+25+25) + A ∩ B ∩ C

推导出
         A ∩ B ∩ C <= 25

TA的精华主题

TA的得分主题

发表于 2018-10-1 12:42 | 显示全部楼层
第一组:1-50
第二组:全单1 3 5 7 ... ... 95 97 99
第三组:1-25 + 76-100
第四组:1-12 + 25-37+51-62 +74 + 77-88
100.jpg
从韦恩图 计算
4 组集合的 并集 =13*4+6*8+7=107个 元素 (至少)





TA的精华主题

TA的得分主题

发表于 2018-10-1 18:31 | 显示全部楼层
韦恩图不同的相交区域为2^n个;
四个集合相交的韦恩图,有效的有15个区域。

下图才是正确的 画法。

v2-qq.png

TA的精华主题

TA的得分主题

发表于 2018-10-1 18:52 | 显示全部楼层
把 不同区域的 数字 加起来 ,楼主给的 4组数 的并集  
    =7*5+ 6*10 =95  元素

(<=100) 是一种 合理的组合。


qcc.jpg

TA的精华主题

TA的得分主题

发表于 2018-10-1 18:59 | 显示全部楼层
5个集合 有效的 不同区域应该是  =2^5-1= 31


hhh.png

TA的精华主题

TA的得分主题

发表于 2018-10-1 23:17 来自手机 | 显示全部楼层
gensen 发表于 2018-9-30 15:29
嗯,是的,两组之间有25个相同数就可以,但各组不能都是完全固定一模一样的25个数字。

这个是可能的, ...

从前26中随机取25个,有26种取法。其余25个随机从后74中取。

TA的精华主题

TA的得分主题

发表于 2018-10-2 08:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zopey 于 2018-10-2 08:56 编辑

Private Sub CommandButton1_Click()
Cells.ClearContents
Dim m&, n&, r&, s&, z&

    m = 100 '取数范围m
    n = 50 '每组个数n
    s = 25 '相同个数s
    z = 3 '组数z

For i = 1 To m
    Cells(i, 1) = Rnd()
    Cells(i, 2) = i
Next

Columns("A:B").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess

Dim arr, brr(), r1, r2, r3
arr = [b1].Resize(m, 1)
ReDim brr(1 To m, 1 To z)

r1 = Int(Rnd() * (s + 1))
r2 = s - r1
r3 = n - s - r2

For i = 1 To r1
For j = 1 To z
    brr(i, j) = arr(i, 1)
Next
Next


For i = 1 To r2 * z
    k = Int((i - 1) / r2)
    If k = 0 Then
       brr(r1 + i, 1) = arr(r1 + i, 1)
       brr(r1 + i, 2) = arr(r1 + i, 1)
    ElseIf k = 1 Then
       brr(r1 + i, 2) = arr(r1 + i, 1)
       brr(r1 + i, 3) = arr(r1 + i, 1)
    ElseIf k = 2 Then
       brr(r1 + i, 3) = arr(r1 + i, 1)
       brr(r1 + i, 1) = arr(r1 + i, 1)
    End If
Next

For i = 1 To r3 * z
    k = Int((i - 1) / r3)
    brr(r1 + r2 * z + i, k+1) = arr(r1 + r2 * z + i, 1)
Next

[d1].Resize(m, z) = brr
End Sub

z=3(3个集合) 比较简单,拿来练练手 3集合交集.rar (12.17 KB, 下载次数: 2)



TA的精华主题

TA的得分主题

发表于 2018-10-2 10:30 | 显示全部楼层
按图索画

4集合交集.rar (13.34 KB, 下载次数: 7)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-2 15:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

非常感谢,学到了很多
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 12:36 , Processed in 0.026010 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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