Thử vào bài toán gốc ra 14, kết quả đúng là 13Thê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)))
Cột O cá sấu trên có 5 con, nhưng phía dưới chỉ liệt kê có 4Thử vào bài toán gốc ra 14, kết quả đúng là 13
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)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 ạ.
Mình cứ ngỡ là 13 nên chỉnh công thức lung tungCột O cá sấu trên có 5 con, nhưng phía dưới chỉ liệt kê có 4
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é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)
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.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}))))
Công thức đó cũ rồi, đã cập nhật công thức mới bài #36.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.
Tạo code cho bạnE đ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 ạ.
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ốngXem 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
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,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?
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ếtCode 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?
Không hiểu cái gì luôn, làm càn, hên xui:
=MIN(SUM(D4:R4)-SUM(LARGE(D4:R4,{1,2,3,4})),INT(SUM(D4:R4)/5))
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 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: Bài #33
=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}))))
=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)))
e cảm ơn bác ạ!nếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #33
điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #36Mã:=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}))))
Số trường hợp lấy 5 con lý tưởng là SUM(D4:R4)/5Mã:=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)))
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
...
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 ạ!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
Bạn tìm hiểu cách dùng hàm VlookupEm 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 LookupEm 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 ạ!
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ìnhnếu bỏ qua điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #33
điều kiện mỗi nhóm có ít nhất 1 con vật: Bài #36Mã:=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}))))
Số trường hợp lấy 5 con lý tưởng là SUM(D4:R4)/5Mã:=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)))
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 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ápBạ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