Hướng dẫn hàm số tạo số ngẫu nhiên sao cho tổng bằng đúng 1 số

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

keandanh141

Thành viên mới
Tham gia
12/11/24
Bài viết
3
Được thích
0
Các bác cho e hỏi 1 chút, e có bảng như e đính kèm, cột 3 = cột 2 - 1. Bài toán là em muốn các số ở cột 1 (random số) trừ đi cột 2 (random số) = cột 3 (random số), sao cho tổng của cột 3 random số = đúng số 5.263.509
Về điều kiện khoảng thì:
Cột 1: trong khoảng từ 45k đến 60k
Cột 2: trong khoảng từ 15k-18k
Cột 3: trong khoảng từ 30-40k
Nhờ bác nào cao tay chỉ giúp em với ạ. Em cảm ơn ạ
 

File đính kèm

  • Book1.xlsx
    22.5 KB · Đọc: 10
Các bác cho e hỏi 1 chút, e có bảng như e đính kèm, cột 3 = cột 2 - 1. Bài toán là em muốn các số ở cột 1 (random số) trừ đi cột 2 (random số) = cột 3 (random số), sao cho tổng của cột 3 random số = đúng số 5.263.509
Về điều kiện khoảng thì:
Cột 1: trong khoảng từ 45k đến 60k
Cột 2: trong khoảng từ 15k-18k
Cột 3: trong khoảng từ 30-40k
Nhờ bác nào cao tay chỉ giúp em với ạ. Em cảm ơn ạ
"e có bảng như e đính kèm, cột 3 = cột 2 - 1. Bài toán là em muốn các số ở cột 1 (random số) trừ đi cột 2 (random số) = cột 3 (random số)"

Tức là ban đầu 3 = 2 - 1, sau bạn mong muốn là 3 = 1 - 2?
 
Ta cứ lấy 2 hàng liên tiếp nhau từng đôi 1 thì có bảng sau:

Cột 1Cột 2Cột 3
X1Y1Z1(X1 - X2) =Z1
X2YỲZ2(X2 - Y2 ) = Z2
Z1Z2=2 * 5 263 509/149Z1 + Z2 = 2 * 5 263 509/149

Trong đó Z1 + Z2 = 2 * 5 263 509 / 149
Như vậy là ta có 4 ẩn & 3 phương trình;
Ta cứ ấn định trước Z1 hay Z2 thì tìm ra các ẩn còn lại
 
Lần chỉnh sửa cuối:
"e có bảng như e đính kèm, cột 3 = cột 2 - 1. Bài toán là em muốn các số ở cột 1 (random số) trừ đi cột 2 (random số) = cột 3 (random số)"

Tức là ban đầu 3 = 2 - 1, sau bạn mong muốn là 3 = 1 - 2?
e có nhầm 1 chút, cột 1 - cột 2 = cột 3, ví dụ G2-H2=L2, G3-H3=L3,... e có dùng hàm random cho cột 1 và cột 2, sau khi lấy các số ở cột 1 trừ cột 2 thì ra cột 3, e muốn tổng Sum của cả cái cột 3 = đúng cái số e yêu cầu là 5.263.509 , nhưng mà khó quá e chưa biết xử lý ntn.
 
e có nhầm 1 chút, cột 1 - cột 2 = cột 3, ví dụ G2-H2=L2, G3-H3=L3,... e có dùng hàm random cho cột 1 và cột 2, sau khi lấy các số ở cột 1 trừ cột 2 thì ra cột 3, e muốn tổng Sum của cả cái cột 3 = đúng cái số e yêu cầu là 5.263.509 , nhưng mà khó quá e chưa biết xử lý ntn.
.
Thử làm ngược lại:

1. Random cột 3 sao cho tổng bằng 1 số cho trước kèm điều kiện.

2. Random cột 2 với điều kiện trong khoảng cho trước và cộng với cột 3 cũng với điều kiện trong khoảng cho trước của cột 1 .
 
.
Thử làm ngược lại:

1. Random cột 3 sao cho tổng bằng 1 số cho trước kèm điều kiện.

2. Random cột 2 với điều kiện trong khoảng cho trước và cộng với cột 3 cũng với điều kiện trong khoảng cho trước của cột 1 .
Thế thì sẽ dùng hàm if lồng vào với hàm random à bác
 
MAx cột 1 = 60
Max cột 2 = 18
Max cột 3 = 40
MÀ 1 = 2 + 3
Nên max 1 sẽ là max 2 + max3 = 18+40 = 58
Như vậy max cột 1 là 60 có đúng không, hay chỉ là 58 ?
 
Bạn dùng VBA nhé. Click vào nút RUN để tạo.

Lưu ý
tota = 5263509 ' Nếu bạn muốn cố định giá trị tổng
tota =InputBox("Ban muon tong gia tri cot 3 la bao nhieu?")' sẽ hiện ô chọn để bạn điền giá trị tổng vào

PHP:
Option Explicit
Sub randomNum()
Dim i&, k&, rng, tota&, mNUm As Double, r, s, cong As Double
Dim res1(), res2(), res3(), dic As Object
Set dic = CreateObject("Scripting.Dictionary")
On Error Resume Next

'Dung InputBox neu gia tri tong nay thay doi
tota = 5263509 'InputBox("Ban muon tong gia tri cot 3 la bao nhieu?")
On Error GoTo 0
rng = Range("E2:F" & Cells(Rows.Count, "E").End(xlUp).Row - 1).Value
If Not IsNumeric(tota) Or tota < UBound(rng) Then
    MsgBox "Gia tri nay khong hop le! Hay thu lai."
    Exit Sub
End If
ReDim res1(1 To UBound(rng)), res2(1 To UBound(rng)), res3(1 To UBound(rng))
mNUm = tota / UBound(rng)

'Tao gia tri ngau nhien tu 30K den 40K va luu vao res1
Randomize
For i = 1 To Int(UBound(rng) / 2)
    r = Int(Rnd * (40000 - 30000)) + 30000
    k = k + 1: res1(k) = r: cong = cong + res1(k)
    k = k + 1: res1(k) = Int(mNUm * 2) - r: cong = cong + res1(k)
Next

'Dua gia tri cua dong cuoi cung vao dong cuoi cung
Select Case k
    Case (UBound(rng) - 1)
         k = k + 1: res1(k) = tota - cong
    Case Else
        res1(k) = tota - cong + res1(k)
End Select

'Sap xep lai ngau nhien cho cot 3
For i = 1 To UBound(res1)
    Do
        r = Int(Rnd * UBound(res1)) + 1
        If Not dic.exists(r) Then
            dic.Add r, ""
            Exit Do
        End If
    Loop
    res3(i) = res1(r): res1(r) = ""
Next

'Tao gia tri ngau nhien cho cot 2 và cot 1
For i = 1 To UBound(res3)
    Do
        r = Int(Rnd * (18000 - 15000)) + 15000
        s = r + res3(i)
        If s >= 45000 And s <= 60000 Then Exit Do
    Loop
    res1(i) = s: res2(i) = r
Next

'Dan ket qua vao sheet
Range("G2").Resize(UBound(res1), 1).Value = WorksheetFunction.Transpose(res1)
Range("H2").Resize(UBound(res2), 1).Value = WorksheetFunction.Transpose(res2)
Range("J2").Resize(UBound(res3), 1).Value = WorksheetFunction.Transpose(res3)
End Sub
 

File đính kèm

  • Book1.xlsm
    30.7 KB · Đọc: 5
e có nhầm 1 chút, cột 1 - cột 2 = cột 3, ví dụ G2-H2=L2, G3-H3=L3,... e có dùng hàm random cho cột 1 và cột 2, sau khi lấy các số ở cột 1 trừ cột 2 thì ra cột 3, e muốn tổng Sum của cả cái cột 3 = đúng cái số e yêu cầu là 5.263.509 , nhưng mà khó quá e chưa biết xử lý ntn.
Bạn xem file đính kèm để áp dụng vào file của mình.

Vào menu Data, tìm Solver, nhấn Solve để chạy.
Ô màu xanh là giá trị mong muốn
 

File đính kèm

  • Book1(9).xlsx
    26.4 KB · Đọc: 5
Web KT

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

Back
Top Bottom