CÔNG THỨC CHỌN RA 5 CON TRONG SỐ 10 CON VẬT (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

giaydabo

Thành viên chính thức
Tham gia
18/3/16
Bài viết
50
Được thích
3
CÁC BÁC GIÚP EM.
Chọn ra số lượng 5 con vật khác nhau ghép cặp với nhau, xem ra bao nhiêu cặp như thế?

1548752797209.png
 

File đính kèm

KO BÁC NÀO GIÚP E Ạ.
@HieuCD Bác giúp em với?
Mình dùng code VBA tạo Function được không?
Có phân biệt thứ tự không? ví dụ: gà lợn và lợn gà là 1 hay 2 khả năng?
Kết quả là con số thể hiện số cặp, hay liệt kê tất cả các cặp?
Các con số dòng thứ 2 là gì vậy?
 
Mình dùng code VBA tạo Function được không?
Có phân biệt thứ tự không? ví dụ: gà lợn và lợn gà là 1 hay 2 khả năng?
Kết quả là con số thể hiện số cặp, hay liệt kê tất cả các cặp?
Các con số dòng thứ 2 là gì vậy?
a chờ em chút, anh làm công thức bình thường giúp em với ạ. Code là e không biết gì luôn ạ
 
Mình dùng code VBA tạo Function được không?
Có phân biệt thứ tự không? ví dụ: gà lợn và lợn gà là 1 hay 2 khả năng?
Kết quả là con số thể hiện số cặp, hay liệt kê tất cả các cặp?
Các con số dòng thứ 2 là gì vậy?

gà lợn hay lợn gà là như nhau? chỉ cần tìm ra có bao nhiêu cặp là được ạ
em gửi lại file cần giúp đỡ. bác xem điều kiện trực tiếp trên file và làm giúp em ạ
Em cảm ơn Anh Ạ!
 

File đính kèm

gà lợn hay lợn gà là như nhau? chỉ cần tìm ra có bao nhiêu cặp là được ạ
em gửi lại file cần giúp đỡ. bác xem điều kiện trực tiếp trên file và làm giúp em ạ
Em cảm ơn Anh Ạ!
Bài toán rất hay, tiếc rằng 40 năm rồi không coi lại xác suất cổ điển nên quên hết, để mình tìm lớp học lại
Trong khi chờ đợi, nhờ các bạn trên diễn đàn giải dùm
 
gà lợn hay lợn gà là như nhau? chỉ cần tìm ra có bao nhiêu cặp là được ạ
em gửi lại file cần giúp đỡ. bác xem điều kiện trực tiếp trên file và làm giúp em ạ
Em cảm ơn Anh Ạ!
Nếu chỉ cần tìm số cặp
Thì đó là bài toán tổ hợp 5 của 10
=COMBIN(10,5)
là ra số cặp (5) cần tìm)
 
Lần chỉnh sửa cuối:
gà lợn hay lợn gà là như nhau? chỉ cần tìm ra có bao nhiêu cặp là được ạ
em gửi lại file cần giúp đỡ. bác xem điều kiện trực tiếp trên file và làm giúp em ạ
Em cảm ơn Anh Ạ!
Làm tạm cho bạn bằng công thức, nhưng tính từng lần để xác định được cặp nào luôn (không sử dụng một công thức được), cách tính chọn cặp theo số lượng từ lớn tới nhỏ. Đang làm công thức cố định cho 3 nhóm, số cặp có thể thay đổi ở R1 nhưng phải lớn hơn hoặc bằng 3 cặp,sửa số lượng từng loại thì sửa ở dòng 5, kết quả là sum cột P lại.
Theo cách tính này thì số liệu bạn đưa tính ra được 13 cặp, bạn HieuCD tính 14 cặp có thể cách tính này chưa tối ưu.
Bài đã được tự động gộp:
 

File đính kèm

Lần chỉnh sửa cuối:
gà lợn hay lợn gà là như nhau? chỉ cần tìm ra có bao nhiêu cặp là được ạ
em gửi lại file cần giúp đỡ. bác xem điều kiện trực tiếp trên file và làm giúp em ạ
Em cảm ơn Anh Ạ!
Đêm qua ngủ ngon, nhớ máng máng có nàng tiên xinh đẹp mách nước :)
Dùng cột phụ cho gọn, nếu thích thì tự gôm hết vào 1 công thức duy nhất
Bài đã được tự động gộp:

Làm tạm cho bạn bằng công thức, nhưng tính từng lần để xác định được cặp nào luôn (không sử dụng một công thức được), cách tính chọn cặp theo số lượng từ lớn tới nhỏ. Đang làm công thức cố định cho 3 nhóm, số cặp có thể thay đổi ở R1 nhưng phải lớn hơn hoặc bằng 3 cặp,sửa số lượng từng loại thì sửa ở dòng 5, kết quả là sum cột P lại.
Theo cách tính này thì số liệu bạn đưa tính ra được 13 cặp, bạn HieuCD tính 14 cặp có thể cách tính này chưa tối ưu.
Bài đã được tự động gộp:
Mình không để ý phân phối lần 2, cám ơn bạn, chúc bạn 1 sáng vui
Thay số cực đoan một chút, kết quả trong file chưa hợp lý
 

File đính kèm

Đêm qua ngủ ngon, nhớ máng máng có nàng tiên xinh đẹp mách nước :)
Dùng cột phụ cho gọn, nếu thích thì tự gôm hết vào 1 công thức duy nhất
Bài đã được tự động gộp:


Mình không để ý phân phối lần 2, cám ơn bạn, chúc bạn 1 sáng vui
Thay số cực đoan một chút, kết quả trong file chưa hợp lý
Trường hợp 2 bạn đưa, tôi tính 10 cặp bạn tính 8, tôi đếm lại 10 cặp vẫn đúng, bạn xem bảng phân bổ kết quả cho trường hợp 2.
 

File đính kèm

File đính kèm

@giaydabo
Đổi không khí bằng VBA
Code trong dưới đây các tổ hợp giống nhau vẫn đếm
Kết quả điền vào sheet2
Không biết sai chỗ nào lại ra 16 khác với bác HieuCD
---
Sửa điều kiện Do_Loop cho đúng, kết quả = 15
Mã:
Sub abc_()
Dim Nguon
Dim Nhom
Dim SoLuong, MinSl
Dim Ten
Dim Tam
Dim DicTT As Object
Dim i, j, k, x, z, t

Set DicTT = CreateObject("Scripting.Dictionary")
Nguon = Sheet1.Range("d3:r4")
ReDim Nhom(1 To 3), SoLuong(1 To 3)
For i = 1 To 15 Step 5
    For j = i To i + 4
        If Nguon(2, j) > 0 Then
            DicTT(Nguon(1, j)) = Array(Nguon(1, j), Nguon(2, j))
        End If
    Next j
    k = k + 1
    Nhom(k) = DicTT.items
    SoLuong(k) = DicTT.Count
    DicTT.RemoveAll
Next i
Sheet2.UsedRange.Clear
MinSl = UBound(Nguon, 2)
'Do While SoLuong(1) >= 0 And SoLuong(2) >= 0 And SoLuong(3) >= 0 And SoLuong(1) + SoLuong(2) + SoLuong(3) >= 4
Do While SoLuong(1) > 0 And SoLuong(2) > 0 And SoLuong(3) > 0 And SoLuong(1) + SoLuong(2) + SoLuong(3) > 4
    ReDim Ten(1 To 3)
    For j = 1 To UBound(Nhom)
        k = 0
        SoLuong(j) = 0
        Tam = Nhom(j)
        If MinSl > UBound(Tam) + 1 Then MinSl = UBound(Tam) + 1
        ReDim Ds(UBound(Tam))
        For i = 0 To UBound(Tam)
            Ten(j) = Ten(j) & IIf(Ten(j) = "", "", "|") & Tam(i)(0)
            Tam(i)(1) = Tam(i)(1) - 1
            If Tam(i)(1) Then
                Tam(k) = Tam(i)
                k = k + 1
            End If
        Next i
        If k Then
            SoLuong(j) = k
            ReDim Preserve Tam(k - 1)
            Nhom(j) = Tam
        End If
    Next j
    Sheet2.Range("A1000000").End(xlUp).Offset(1) = Replace(Ten(1), "|", ", ")
    Sheet2.Range("B1000000").End(xlUp).Offset(1) = Replace(Ten(2), "|", ", ")
    Sheet2.Range("C1000000").End(xlUp).Offset(1) = Replace(Ten(3), "|", ", ")
    Sheet2.Range("E1000000").End(xlUp).Offset(1) = MinSl
    Sheet2.Range("E1") = Sheet2.Range("E1") + MinSl
Loop
Sheet2.UsedRange.Columns.AutoFit
End Sub
 
Lần chỉnh sửa cuối:
Bài toán quá nhiều điều kiện, không biết còn sót điều kiện gì không
Bác có thể giải thích cách tính co được không
Còn đoạn code trên là em dung cách trừ lùi bác ạ. Điều kiện là : Khi nào 1 trong 3 cột hết tên hoặc tổng tên trong 3 cột < 5 thì dừng
 

File đính kèm

@giaydabo
Bon chen tí công thức theo cách trừ lùi
Không hiểu cách bạn tính sao ra 15 cặp, bạn có thể đưa ra chi tiết 15 cặp mà bạn chọn được không?
Hình như cách bạn chưa đúng, tổng số lượng là 73 nếu dòng đầu bạn chọn 4 , thì số lượng còn lại phải là 73-4*5=53 chứ, sao lại là 59. không biết tôi có hiểu sai gì không?
1548906545640.png
 
Không hiểu cách bạn tính sao ra 15 cặp, bạn có thể đưa ra chi tiết 15 cặp mà bạn chọn được không?
Hình như cách bạn chưa đúng, tổng số lượng là 73 nếu dòng đầu bạn chọn 4 , thì số lượng còn lại phải là 73-4*5=53 chứ, sao lại là 59. không biết tôi có hiểu sai gì không?
View attachment 211861
Bạn kiểm tra xem:
Các cặp sẽ là thế này ( theo kết quả sub abc trên )
4 Cặp đầu tiên, mỗi cặp sẽ chứa 1 trong 4 con nay : CỪU , GẤU, HỔ, CÁ. ( cột B )
3 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 3 con nay : CỪU , GẤU, CÁ ( cột B )
3 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 3 con nay : CỪU , GẤU, CÁ ( cột B ) và LỢN, CHÓ, DÊ ( cột A )
2 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 2 con nay : CHÓ, DÊ ( cột A )
2 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 2 con nay : CHÓ, DÊ ( cột A )
1 Cặp cuối, sẽ chứa CHÓ ( cột A )
Tổng là 15
 
Bạn kiểm tra xem:
Các cặp sẽ là thế này ( theo kết quả sub abc trên )
4 Cặp đầu tiên, mỗi cặp sẽ chứa 1 trong 4 con nay : CỪU , GẤU, HỔ, CÁ. ( cột B )
3 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 3 con nay : CỪU , GẤU, CÁ ( cột B )
3 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 3 con nay : CỪU , GẤU, CÁ ( cột B ) và LỢN, CHÓ, DÊ ( cột A )
2 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 2 con nay : CHÓ, DÊ ( cột A )
2 Cặp tiếp theo, mỗi cặp sẽ chứa 1 trong 2 con nay : CHÓ, DÊ ( cột A )
1 Cặp cuối, sẽ chứa CHÓ ( cột A )
Tổng là 15
Hình như có chút hiểu nhầm, mỗi cặp là 5 con bạn ạ!
 
Bác có thể giải thích cách tính co được không
Còn đoạn code trên là em dung cách trừ lùi bác ạ. Điều kiện là : Khi nào 1 trong 3 cột hết tên hoặc tổng tên trong 3 cột < 5 thì dừng
Thuật toán của mình là xét các khả năng cao nhất có thể xảy ra, mình để ở dòng 7, cách xét các khả năng theo từng cấp
- Cấp 1 dựa trên tổng số phân mỗi nhóm 5: =INT(SUM(D5:R5)/5)
-Cấp 2 dựa trên 2 nhóm có khả năng cao nhất và phân 4 con: =INT((SUM(X5:Z5)-AA5)/4)
Chi tiết rất khó giải thích
Khó tìm ra được cách tối ưu, bạn thử với trường hợp này xem, đếm tay thì ra 15.
View attachment 211863
Chỉnh thêm điều kiện tính cho trường hợp nầy, còn trường hợp khác thì chưa biết !$@!! /-*+/
 

File đính kèm

Không hiểu cái gì luôn, làm càn, hên xui: :p

=MIN(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),INT(SUM(D4:R4)/5))
 
Mới nạp năng lượng :) chỉnh tiếp, bạn kiểm tra dùm còn trường hợp nào chưa ổn /-*+/
Trường hợp này ít nhất là 45 :confused:
1548915994406.png
Trường hợp này ít nhất 13
1548917292194.png
Cái này chắc bỏ qua đi bạn, khó tìm được giải pháp tối ưu, giải quyết từng trường hợp, nó sai lại trường hợp ban đầu không biết.:(
 
Lần chỉnh sửa cuối:
Thử cái này:
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4}))))
 
Thêm vào tổng từng nhóm:
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
 
Thêm vào tổng từng nhóm:
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
hình như em thấy công thức này đủ hết thì phải. Bác siêu nhân quá ạ. Các bác kiểm tra giúp ạ!
 
Ý tôi là bạn áp dụng vào cụ thể thực tế làm gì, ví dụ chọn các con vật đó cho trình bày ở sở thú (vườn bách thảo) chẳng hạn
Hay ứng dụng khác
Nếu biết thực tế, có thể có giải pháp thực tế hơn

Hay bạn chỉ đưa ra bài toán lý thuyết tìm hiểu thuật toán- nếu đúng thế cũng cách tiếp cận khác - như bài toán cây (tree) trong công nghệ thông tin

E đang cần ghép các nhóm sản phẩm khác nhau cho công ty. Tên sản phẩm thì em thay tên bằng con vật rùi đấy ạ.
 
Thêm vào tổng từng nhóm:
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
Oke đúng bằng 3, tôi thấy thử một số trường hợp khác tính tay thấy đúng, nhưng không biết bao quát hết chưa vì không liệt kê được chi tiết từng cặp, thuật toán này chắc không dám coi rồi.
 
Lần chỉnh sửa cuối:
Oke đúng bằng 3, tôi thấy thử một số trường hợp khác tính tay thấy đúng, nhưng không biết bao quát hết chưa vì không liệt kê được chi tiết từng cặp, thuật toán này chắc không dám coi rồi.

bác @phuocam giải thích giúp em về công thức này với ạ? Đầu óc em nó ko luận ra được?
 
@giaydabo
Bài này nếu dùng vba có thể tổng quát được số kết quả. Có điều bạn cần làm rõ là các tổ hợp giống nhau sẽ tính là 1 hay là khác
 
Thêm vào tổng từng nhóm:
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
Thử vào bài toán gốc ra 14, kết quả đúng là 13:(
 
E đang cần ghép các nhóm sản phẩm khác nhau cho công ty. Tên sản phẩm thì em thay tên bằng con vật rùi đấy ạ.
Bài này có nhiều cách chọn - mỗi cách lại có số nhóm lặp (5) - không rõ bạn tìm cách nào? (tối ưu, hay 1 cách là được)
tham khảo ví dụ 8 ở link này, sẽ thấy gần giống có nhiều cách
https://toanmath.com/2018/06/phuong-phap-giai-bai-toan-dem.html
 
Chủ câu hỏi không thấy đâu nhỉ, nghe bài này giống bầu cua tôm cá, ai có thể khái quát bài toán ứng dụng để anh em biết cách ứng dụng được không?

Tôi biết các anh em thành viên GPE ở đây nhiệt tình, nhiều khi cứ làm nhưng không biết là dùng vào đâu? (bài này nghe giống bầu cua tôm cá nhưng lại khác)
Có bắt buộc phải biết dùng vào đâu hay không? Ghép nhóm sản phẩm (combo) để bán với 1 số điều kiện gì đó thì sao? Tôi lại phải xóa rồi nhé
 
Thử cái này:
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4}))))
Xem kĩ lại thì công thức của bạn xét trên cả vùng, chứ không xét trên từng nhóm nên chưa thể đúng được, bạn kiểm tra lại trường hợp này xem kết quả đúng chỉ có 2 cặp.
1548952827561.png
 
Gửi file thêm 1 phương án cho chủ topic chọn
Ghi chú kỹ trong file, nếu không hiểu phần nào cứ hỏi nhé
File cho phép lựa chọn các phương án khác nhau, để tự tìm ra số cặp lớn mong muốn

(chính làm xong xem lại, tôi cũng không rõ đã quét đủ phương án chưa, nên chỉ là 1 phương án mọi người tham khảo)
 

File đính kèm

E đang cần ghép các nhóm sản phẩm khác nhau cho công ty. Tên sản phẩm thì em thay tên bằng con vật rùi đấy ạ.
Tạo code cho bạn
Xem kĩ lại thì công thức của bạn xét trên cả vùng, chứ không xét trên từng nhóm nên chưa thể đúng được, bạn kiểm tra lại trường hợp này xem kết quả đúng chỉ có 2 cặp.
View attachment 211885
Công thức của bạn Phuocam đã xét toàn bộ các khả năng, bạn muốn kiểm tra thì dùng code của mình chạy ngẫu nhiên vài ngàn tình huống
Mã:
Sub Main()
  Dim i As Long
  Application.ScreenUpdating = False
  For i = 1 To 1
    Call RandomVal
    Call PhanBo
    If [s4].Value <> [s7].Value Then Exit For
  Next i
  Application.ScreenUpdating = True
End Sub

Private Sub RandomVal()
  Dim Res(), j As Long, Num As Long
  Const N As Long = 15
 
  On Error Resume Next
  Num = Range("S1").Value
  If Num = 0 Then Range("S1") = 10: Num = 10    'Mac dinh Num = 10
  Num = Num + 1
  ReDim Res(1 To 1, 1 To N)
  Randomize
  For j = 1 To N
    Res(1, j) = Int(Rnd * Num)
  Next j
  Range("D4:R4") = Res
End Sub

Sub PhanBo()
  Dim Res(), tmp(), Tong(), S, TongStr As String
  Dim sCol As Long, j As Long, jk As Long, jMax As Long, jCol As Long
  Dim i As Long, k As Long, p As Long
  Const N As Byte = 5
  Const Nhom As Byte = 3
  Const sNhom As Byte = 5
 
  ReDim tmp(1 To N)
  ReDim Tong(1 To 2, 1 To Nhom)
  Range("D5:R1003").ClearContents
  Res = Range("D4:R1003").Value
  sCol = UBound(Res, 2)
    
  For m = 1 To Nhom
    For j = 1 To sNhom
      jk = (m - 1) * sNhom + j
      Tong(1, m) = Tong(1, m) + Res(1, jk)
    Next j
  Next m
    
  i = 1: k = 5
  Do While k = 5
    i = i + 1: k = 0
    For m = 1 To Nhom
      jMax = -1: jCol = 0
      For j = 1 To sNhom
        jk = (m - 1) * sNhom + j
        If Res(i, jk) = Empty And Res(1, jk) > 0 Then
          If Res(1, jk) > jMax Then jMax = Res(1, jk): jCol = jk
        End If
      Next j
      If jCol > 0 Then
        k = k + 1
        tmp(k) = jCol
        Res(i, jCol) = 1
        Tong(1, m) = Tong(1, m) - 1
        Tong(2, m) = Tong(1, m) - Res(1, jCol) + 1
      End If
    Next m
    For q = Nhom + 1 To N
      jMax = -1: TongStr = ""
      For j = 1 To Nhom
        If Tong(2, j) > jMax Then
          jMax = Tong(2, j): m = j: TongStr = "," & j
        ElseIf Tong(2, j) = jMax Then
          TongStr = TongStr & "," & j
        End If
      Next j
      jMax = -1: jCol = 0
      S = Split(TongStr, ",")
      For p = 1 To UBound(S)
        m = CLng(S(p))
        For j = 1 To sNhom
          jk = (m - 1) * sNhom + j
          If Res(i, jk) = Empty And Res(1, jk) > 0 Then
            If Res(1, jk) > jMax Then jMax = Res(1, jk): jCol = jk
          End If
        Next j
      Next p
      If jCol > 0 Then
        m = Int((jCol - 1) / 5) + 1
        k = k + 1
        tmp(k) = jCol
        Res(i, jCol) = 1
        Tong(1, m) = Tong(1, m) - 1
        Tong(2, m) = Tong(2, m) - 1
      End If
    Next q
    If k = 5 Then
      For j = 1 To N
        jCol = tmp(j)
        Res(1, jCol) = Res(1, jCol) - 1
      Next j
    Else
      Range("D7:R47").Resize(i - 1) = Res
      Range("S7") = i - 2
      Exit Sub
    End If
  Loop
End Sub
 

File đính kèm

Tạo code cho bạn

Công thức của bạn Phuocam đã xét toàn bộ các khả năng, bạn muốn kiểm tra thì dùng code của mình chạy ngẫu nhiên vài ngàn tình huống
Mã:
Sub Main()
  Dim i As Long
  Application.ScreenUpdating = False
  For i = 1 To 1
    Call RandomVal
    Call PhanBo
    If [s4].Value <> [s7].Value Then Exit For
  Next i
  Application.ScreenUpdating = True
End Sub

Private Sub RandomVal()
  Dim Res(), j As Long, Num As Long
  Const N As Long = 15

  On Error Resume Next
  Num = Range("S1").Value
  If Num = 0 Then Range("S1") = 10: Num = 10    'Mac dinh Num = 10
  Num = Num + 1
  ReDim Res(1 To 1, 1 To N)
  Randomize
  For j = 1 To N
    Res(1, j) = Int(Rnd * Num)
  Next j
  Range("D4:R4") = Res
End Sub

Sub PhanBo()
  Dim Res(), tmp(), Tong(), S, TongStr As String
  Dim sCol As Long, j As Long, jk As Long, jMax As Long, jCol As Long
  Dim i As Long, k As Long, p As Long
  Const N As Byte = 5
  Const Nhom As Byte = 3
  Const sNhom As Byte = 5

  ReDim tmp(1 To N)
  ReDim Tong(1 To 2, 1 To Nhom)
  Range("D5:R1003").ClearContents
  Res = Range("D4:R1003").Value
  sCol = UBound(Res, 2)
   
  For m = 1 To Nhom
    For j = 1 To sNhom
      jk = (m - 1) * sNhom + j
      Tong(1, m) = Tong(1, m) + Res(1, jk)
    Next j
  Next m
   
  i = 1: k = 5
  Do While k = 5
    i = i + 1: k = 0
    For m = 1 To Nhom
      jMax = -1: jCol = 0
      For j = 1 To sNhom
        jk = (m - 1) * sNhom + j
        If Res(i, jk) = Empty And Res(1, jk) > 0 Then
          If Res(1, jk) > jMax Then jMax = Res(1, jk): jCol = jk
        End If
      Next j
      If jCol > 0 Then
        k = k + 1
        tmp(k) = jCol
        Res(i, jCol) = 1
        Tong(1, m) = Tong(1, m) - 1
        Tong(2, m) = Tong(1, m) - Res(1, jCol) + 1
      End If
    Next m
    For q = Nhom + 1 To N
      jMax = -1: TongStr = ""
      For j = 1 To Nhom
        If Tong(2, j) > jMax Then
          jMax = Tong(2, j): m = j: TongStr = "," & j
        ElseIf Tong(2, j) = jMax Then
          TongStr = TongStr & "," & j
        End If
      Next j
      jMax = -1: jCol = 0
      S = Split(TongStr, ",")
      For p = 1 To UBound(S)
        m = CLng(S(p))
        For j = 1 To sNhom
          jk = (m - 1) * sNhom + j
          If Res(i, jk) = Empty And Res(1, jk) > 0 Then
            If Res(1, jk) > jMax Then jMax = Res(1, jk): jCol = jk
          End If
        Next j
      Next p
      If jCol > 0 Then
        m = Int((jCol - 1) / 5) + 1
        k = k + 1
        tmp(k) = jCol
        Res(i, jCol) = 1
        Tong(1, m) = Tong(1, m) - 1
        Tong(2, m) = Tong(2, m) - 1
      End If
    Next q
    If k = 5 Then
      For j = 1 To N
        jCol = tmp(j)
        Res(1, jCol) = Res(1, jCol) - 1
      Next j
    Else
      Range("D7:R47").Resize(i - 1) = Res
      Range("S7") = i - 2
      Exit Sub
    End If
  Loop
End Sub
Code rất hay, tạo ngẫu nhiên nhiều trường hợp,
Nhưng có thể chúng ta có cách quét hết các trường hợp không bác?
 
Code rất hay, tạo ngẫu nhiên nhiều trường hợp,
Nhưng có thể chúng ta có cách quét hết các trường hợp không bác?
Code rất hay, tạo ngẫu nhiên nhiều trường hợp,
Nhưng có thể chúng ta có cách quét hết các trường hợp không bác?
Có thể, nhưng số khả năng lớn chạy sẽ tốn nhiều thời gian, không cần thiết
 
Không hiểu cái gì luôn, làm càn, hên xui: :p

=MIN(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),INT(SUM(D4:R4)/5))

nếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật thì dùng cách này được đúng ko ạ?
Các bác test giúp em với ạ. E xin cảm ơn. Và nếu có thời gian các bác có thể giải thích giúp em về công thức được ko ạ? e ko hiểu thế mới buồn
 
nếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật thì dùng cách này được đúng ko ạ?
Các bác test giúp em với ạ. E xin cảm ơn. Và nếu có thời gian các bác có thể giải thích giúp em về công thức được ko ạ? e ko hiểu thế mới buồn
BÁC @HieuCD và bác @phuocam giải thích giùm em với. e trả biết chạy cod để thử? \e cảm ơn ạ
 
BÁC @HieuCD và bác @phuocam giải thích giùm em với. e trả biết chạy cod để thử? \e cảm ơn ạ
nếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #33
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4}))))
điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #36
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
Số trường hợp lấy 5 con lý tưởng là SUM(D4:R4)/5
Nhưng có thể số con tập trung cho loại lớn nhất, loại lớn nhất lấy 1 con, tổng các loại còn lại có thể không đủ lấy 4 con nên xét các loại còn lại không tính loại lớn nhất (SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4
Tương tự loại lớn nhất lớn nhì lấy 2 con, tổng các loại còn lại có thể không đủ lấy 3 con: (SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3
...
 
nếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #33
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4}))))
điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #36
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
Số trường hợp lấy 5 con lý tưởng là SUM(D4:R4)/5
Nhưng có thể số con tập trung cho loại lớn nhất, loại lớn nhất lấy 1 con, tổng các loại còn lại có thể không đủ lấy 4 con nên xét các loại còn lại không tính loại lớn nhất (SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4
Tương tự loại lớn nhất lớn nhì lấy 2 con, tổng các loại còn lại có thể không đủ lấy 3 con: (SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3
...
e cảm ơn bác ạ!
 
Có thể, nhưng số khả năng lớn chạy sẽ tốn nhiều thời gian, không cần thiết
Em không thể nhắn tin riêng cho bác. bác giúp em làm công thức trong file excel em gửi với ạ. Mong bác giúp đỡ. E cảm ơn ạ!
 

File đính kèm

Em không thể nhắn tin riêng cho bác. bác giúp em làm công thức trong file excel em gửi với ạ. Mong bác giúp đỡ. E cảm ơn ạ!
Bạn tìm đầu tiền dùng Vlookup cho đơn giản (hình như Index + match cũng được thì phải - chưa dùng), thường dùng tìm dòng cuối là chính Lookup
Bài đã được tự động gộp:

nếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #33
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4}))))
điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #36
Mã:
=INT(MIN(SUM(D4:R4)/5,
(SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3,
(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3})))/2,
SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),
SUM(D4:H4),
SUM(I4:M4),
SUM(N4:R4)))
Số trường hợp lấy 5 con lý tưởng là SUM(D4:R4)/5
Nhưng có thể số con tập trung cho loại lớn nhất, loại lớn nhất lấy 1 con, tổng các loại còn lại có thể không đủ lấy 4 con nên xét các loại còn lại không tính loại lớn nhất (SUM(D4:R4)-SUM(LARGE(D4:R4,1)))/4
Tương tự loại lớn nhất lớn nhì lấy 2 con, tổng các loại còn lại có thể không đủ lấy 3 con: (SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2})))/3
...
Môn xác suất hồi đi học ngu cả người ra, môn này khác nhiều người rớt. May mắn không có mình
 
Bạn tìm đầu tiền dùng Vlookup cho đơn giản (hình như Index + match cũng được thì phải - chưa dùng), thường dùng tìm dòng cuối là chính Lookup
Bài đã được tự động gộp:


Môn xác suất hồi đi học ngu cả người ra, môn này khác nhiều người rớt. May mắn không có mình
Môn nầy mình được học Thầy Nguyễn Tấn Lập giáo sư đại học ở Pháp theo lời kêu gọi của Bác Hồ về phục vụ tổ quốc, nghe nói Thầy 23 tuổi lấy tiến sĩ toán xác suất Pháp
 

Bài viết mới nhất

Back
Top Bottom