Việt Đức Phạm
Thành viên mới
- Tham gia
- 17/5/17
- Bài viết
- 1
- Được thích
- 0
- Giới tính
- Nam
Tại sao code của bác ấn F9 nó không nhảy giá trị như code của bác HUONGHCKT như trên vậy nhỉ? Là lạ bác ạ!Cho phép ham vui xíu nha:
Nhưng số lít cần nhập nên gấp 6 lần trở lên so với số dòng mới đẹp mảng nhận đượcPHP:Function SoTuDong(ByVal Tien As Long, Dong As Integer) As Variant Dim fNum As Integer, TB As Long, J As Integer, Tong As Integer TB = Tien / Dong: Randomize ReDim KQ(1 To Dong, 1 To 1) Do J = J + 1: If J = Dong Then KQ(Dong, 1) = Tien - Tong: Exit Do End If fNum = J + TB * Rnd() KQ(J, 1) = fNum \ 1 Tong = Tong + KQ(J, 1) Loop SoTuDong = KQ() End Function
Solver có vẻ không hay vì nó cho cảm giác không phải random thực sự, nó dồn to vào 1 chỗ, phần còn lại bị teo nhỏ nhỉ.
File này chủ yếu là test solver có thể tìm được kết quả yêu cầu hay không nên để đơn giản vậy chạy cho nhanh.Tại sao code của bác ấn F9 nó không nhảy giá trị như code của bác HUONGHCKT như trên vậy nhỉ? Là lạ bác ạ!
Solver có vẻ không hay vì nó cho cảm giác không phải random thực sự, nó dồn to vào 1 chỗ, phần còn lại bị teo nhỏ nhỉ.
Chỉ điều chỉnh 1 giá trị có thể làm kết quả chênh lệch không đềuFunction PhanBo(ByVal tong As Long, ByVal phan As Long)
' ham phan bo so luong "tong" theo so luong "phan"
' output: mot mang "phan" phan tu; dieu kien: moi phan tu duoc phan bo it nhat 1
'
If tong < phan Then
PhanBo = "Khong du luong de phan bo"
Exit Function
End If
Randomize
ReDim a(1 To phan) As Long
For i = 1 To phan
a(i) = Application.RandBetween(1, 1000000)
tongA = tongA + a(i)
Next i
tongA = (tong - phan) / tongA ' tinh he so cho moi phan tu
For i = 1 To phan
a(i) = Int(a(i) * tongA) + 1 ' cong 1 de bao dam moi phan tu >= 1
tong = tong - a(i)
Next i
If tong > 0 Then ' thanh ly so le do sai so tinh toan
i = Application.RandBetween(1, phan)
a(i) = a(i) + tong
End If
PhanBo = a
End Function
Hàm trả về một mảng dọc.
Để sử dụng:
- select 10 ô liên tiếp
- gõ =PhanBo(số lượng, 10)
- gõ Ctrl+Shift+Enter
Giải thuật được tính theo kiểu để tránh tối đa trường hợp chênh lệch nhiều quá (tránh tối đa là đủ rồi, đã random thì tránh 100% hơi khó.)