Xin giúp đỡ về hàm thống kê (1 người xem)

Liên hệ QC

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

nguyenhongphuong0204

Thành viên mới
Tham gia
21/1/20
Bài viết
22
Được thích
1
Mình có một hàm
TU = 275m + 75n + 157g + 163h + 126j - 684
Tìm m,n,g,h,j để TU -> min và TU > 0
Các biến là số nguyên, tìm TU

Mình loay hoay 2 ngày nay vẫn chưa tìm ra được cách. :(((
 
Bạn có thể cho OT tham khảo Code này được không? OT thấy kiểu này chắc chỉ có For và For ... T_T
OT cũng chưa hiểu "TU -> min" là như thế nào ạ?
Thì tất cả đều là số nguyên, tìm min, min >0 => đoán là TU=1 =>275m + 75n + 157g + 163h + 126j =685.
Bài này chạy solver là ra đâu cần code gì đâu bạn.
Có cái là đoán vậy trúng hay trật cũng chưa biết chừng
 
Cái này "solver" là sao vậy Bạn?
Bài này tương tự bài 13 của đường dẫn dưới đây.
 
Bài này tương tự bài 13 của đường dẫn dưới đây.
Cảm ơn Bạn đã chỉ dẫn, OT đang thử kiểu này thì bị treo máy ... hí hí hí (cứ tưởng ngon ăn)
Mã:
Sub For_Va_For()
    Dim TU As Long, m As Integer, n As Integer, g As Integer, h As Integer, j As Integer
    For m = 0 To 9: For n = 0 To 9: For g = 0 To 9: For h = 0 To 9: For j = 0 To 9
        TU = CLng(275 & m) + CLng(75 & n) + CLng(157 & g) + CLng(163 & h) + CLng(126 & j) - 684
'        If TU > 0 And ... Then
            Debug.Print TU & ";" & m & ";" & n & ";" & g & ";" & h & ";" & j
'        End If
    Next j: Next h: Next g: Next n: Next m
End Sub

Lót dép để "hóng" ạ :D
 
Cảm ơn Bạn đã chỉ dẫn, OT đang thử kiểu này thì bị treo máy ... hí hí hí (cứ tưởng ngon ăn)
Mã:
Sub For_Va_For()
    Dim TU As Long, m As Integer, n As Integer, g As Integer, h As Integer, j As Integer
    For m = 0 To 9: For n = 0 To 9: For g = 0 To 9: For h = 0 To 9: For j = 0 To 9
        TU = CLng(275 & m) + CLng(75 & n) + CLng(157 & g) + CLng(163 & h) + CLng(126 & j) - 684
'        If TU > 0 And ... Then
            Debug.Print TU & ";" & m & ";" & n & ";" & g & ";" & h & ";" & j
'        End If
    Next j: Next h: Next g: Next n: Next m
End Sub

Lót dép để "hóng" ạ :D
Bài này mà m, n, g, h, j nguyên dương thì for for cũng được bạn.
Có cái là chẳng biết âm dương thế nào nên để xem vậy.
 
Bài này mà m, n, g, h, j nguyên dương thì for for cũng được bạn.
Có cái là chẳng biết âm dương thế nào nên để xem vậy.
Chạy không treo, quay quay một lúc nhưng cũng không thấy gì luôn Bạn ạ, :D
Mã:
Option Explicit
Sub For_Va_For()
    Dim TU As Long, m As Integer, n As Integer, g As Integer, h As Integer, j As Integer
    For m = 0 To 9: For n = 0 To 9: For g = 0 To 9: For h = 0 To 9: For j = 0 To 9: For TU = 0 To 9
        If TU = CLng(275 & m) + CLng(75 & n) + CLng(157 & g) + CLng(163 & h) + CLng(126 & j) - 684 Then _
        Debug.Print TU & ";" & m & ";" & n & ";" & g & ";" & h & ";" & j
    Next TU: Next j: Next h: Next g: Next n: Next m
End Sub
 
Bài này tương tự bài 13 của đường dẫn dưới đây.
Chào bạn. Mình cám ơn bạn rất nhiều. Mình có xem nãy giờ bài #13 nhưng vẫn chưa hiểu là slover như thế nào. Bạn giúp mình theo file được không? 2 ngày nay mình cày nát cái Google mà vẫn không biết làm sao ra được phương án tối ưu
Bài đã được tự động gộp:

À TU > 0 thôi. Chứ k cần nguyên. Mấy ông biến thì là số nguyên
 
Bạn thử code sau
Mã:
Sub a()
    Dim m, n, g, h, j
    For m = 0 To 685 \ 275
    For n = 0 To 685 \ 75
    For g = 0 To 685 \ 157
    For h = 0 To 685 \ 163
    For j = 0 To 685 \ 126
        If 275 * m + 75 * n + 157 * g + 163 * h + 126 * j = 685 Then Debug.Print m, n, g, h, j
    Next: Next: Next: Next: Next
End Sub
Ở đây các số m,n,g,h,j là số tự nhiên nhưng vì ra kết quả =1 nhỏ nhất rồi nên không tìm số âm nữa
 
Chào bạn. Mình cám ơn bạn rất nhiều. Mình có xem nãy giờ bài #13 nhưng vẫn chưa hiểu là slover như thế nào. Bạn giúp mình theo file được không? 2 ngày nay mình cày nát cái Google mà vẫn không biết làm sao ra được phương án tối ưu
Bài đã được tự động gộp:

À TU > 0 thôi. Chứ k cần nguyên. Mấy ông biến thì là số nguyên
Bạn làm thử theo file bên dưới
 

File đính kèm

Bạn thử code sau
Mã:
Sub a()
    Dim m, n, g, h, j
    For m = 0 To 685 \ 275
    For n = 0 To 685 \ 75
    For g = 0 To 685 \ 157
    For h = 0 To 685 \ 163
    For j = 0 To 685 \ 126
        If 275 * m + 75 * n + 157 * g + 163 * h + 126 * j = 685 Then Debug.Print m, n, g, h, j
    Next: Next: Next: Next: Next
End Sub
Ở đây các số m,n,g,h,j là số tự nhiên nhưng vì ra kết quả =1 nhỏ nhất rồi nên không tìm số âm nữa
Trời ơi hóa phép nhân hả :D. chết mất thôi. khà khà khà. Chữ Thầy trả Cô hết rồi
Cảm ơn Hau151978
Bài đã được tự động gộp:

Hay quá code đã chạy rẹt trong chớp mắt , nhưng OT chưa hiểu con số 685 ở đâu để đưa vào sẵn vậy ạ?
Phiền Bạn Hau151978 giải thích thêm được không ạ? Hic hic vi diệu thật.

Mã:
Option Explicit
Sub For_Va_For()
    Dim TU As Long, m As Integer, n As Integer, g As Integer, h As Integer, j As Integer
    For m = 0 To 9: For n = 0 To 9: For g = 0 To 9: For h = 0 To 9: For j = 0 To 9: For TU = 0 To 9
        If TU = 275 * m + 75 * n + 157 * g + 163 * h + 126 * j - 684 Then _
        Debug.Print TU & "=" & m & ";" & n & ";" & g & ";" & h & ";" & j
    Next TU: Next j: Next h: Next g: Next n: Next m
End Sub
'==============='
'Kết quả:
'8=0;0;2;0;3
'6=0;1;0;3;1
'0=0;1;1;2;1
'7=0;2;0;1;3
'1=0;2;1;0;3<-------Làm sao để xác định được hàng này
'5=0;5;2;0;0
'4=0;7;0;1;0
'6=1;0;0;1;2
'0=1;0;1;0;2
 
Lần chỉnh sửa cuối:
Tìm tất cả trường hợp thỏa điều kiện
Mã:
Sub ABC()
  Dim iMin&, m&, n&, g&, h&, j&, tmp&, Tong&, d&
 
  tmp = 684
  iMin = 10000000
  For m = 0 To tmp \ 275 + 1
    For n = 0 To tmp \ 75 + 1
      For g = 0 To tmp \ 157 + 1
        For h = 0 To tmp \ 163 + 1
          For j = 0 To tmp \ 126 + 1
            Tong = m * 275 + n * 75 + g * 157 + h * 163 + j * 126
            If Tong > tmp Then
              d = Tong - tmp
              If d < iMin Then
                ReDim Res(1 To 1000, 1 To 6)
                iMin = d: k = 1
                Res(k, 1) = m: Res(k, 2) = n: Res(k, 3) = g
                Res(k, 4) = h: Res(k, 5) = j
              ElseIf d = iMin Then
                k = k + 1
                Res(k, 1) = m: Res(k, 2) = n: Res(k, 3) = g
                Res(k, 4) = h: Res(k, 5) = j
              End If
              Exit For
            End If
          Next j
        Next h
      Next g
    Next n
  Next m
  Range("A3:F3").Resize(k) = Res
End Sub
 
Tìm tất cả trường hợp thỏa điều kiện
Mã:
Sub ABC()
  Dim iMin&, m&, n&, g&, h&, j&, tmp&, Tong&, d&

  tmp = 684
  iMin = 10000000
  For m = 0 To tmp \ 275 + 1
    For n = 0 To tmp \ 75 + 1
      For g = 0 To tmp \ 157 + 1
        For h = 0 To tmp \ 163 + 1
          For j = 0 To tmp \ 126 + 1
            Tong = m * 275 + n * 75 + g * 157 + h * 163 + j * 126
            If Tong > tmp Then
              d = Tong - tmp
              If d < iMin Then
                ReDim Res(1 To 1000, 1 To 6)
                iMin = d: k = 1
                Res(k, 1) = m: Res(k, 2) = n: Res(k, 3) = g
                Res(k, 4) = h: Res(k, 5) = j
              ElseIf d = iMin Then
                k = k + 1
                Res(k, 1) = m: Res(k, 2) = n: Res(k, 3) = g
                Res(k, 4) = h: Res(k, 5) = j
              End If
              Exit For
            End If
          Next j
        Next h
      Next g
    Next n
  Next m
  Range("A3:F3").Resize(k) = Res
End Sub
Khuya lắm rồi ngủ thôi Bác ơi, mấy đêm nay đầu óc con toàn ngủ mơ thấy code thôi. :D
Kakaka, ngày mai Bác cháu ta lại tiếp tục chương trình hỏi đáp ạ.
Bác giữ gìn sức khỏe Bác nhé.
Con chúc Bác ngủ ngon.
Oanh Thơ
 
Khi a, b là 2 số nguyên dương nguyên tố cùng nhau (tức là ước số chung lớn nhất =1) thì luôn tồn tại cặp số nguyên x, y để a*x+b*y=1
Điều này chứng minh khá dễ (kiến thức lớp 6 của học sinh >= khá) và dựa vào đó có thể xây dựng thuật toán tìm x y.
Trong các hệ số trên thì 75 và 157 nguyên tố cùng nhau nên chỉ cần tìm x, y để 75x+157y=1, nhân các số x y này với 685 thì được 75n+157j=685, các số còn lại =0.
 
Khi a, b là 2 số nguyên dương nguyên tố cùng nhau (tức là ước số chung lớn nhất =1) thì luôn tồn tại cặp số nguyên x, y để a*x+b*y=1
Điều này chứng minh khá dễ (kiến thức lớp 6 của học sinh >= khá) và dựa vào đó có thể xây dựng thuật toán tìm x y.
Trong các hệ số trên thì 75 và 157 nguyên tố cùng nhau nên chỉ cần tìm x, y để 75x+157y=1, nhân các số x y này với 685 thì được 75n+157j=685, các số còn lại =0.

Dạ. Hôm qua em có làm theo cách solver, kết quả em ra giống anh @CHAOQUAY ở bài #2. Em làm theo hướng là TU>0, em tìm thử với TU min=1. Em chạy solver để tìm các biến m, n, g, h, j (các biến là số nguyên). Nhưng em cứ vướng một vấn đề là: Em thử với TU=1. Nhưng yêu cầu đề ra không yêu cầu TU phải là số nguyên, nên em thắc mắc có trường hợp nào xảy ra thỏa các biến nguyên (có thể âm hoặc dương) mà 0<TU<1 không ạ? (Có khi nào TU=1 chưa phải nhỏ nhất không ạ? Anh hướng dẫn em với ạ. Em cảm ơn anh ạ.
 
Các phép tính cộng và nhân trên số nguyên thì phải ra số nguyên chứ bạn ơi. Mình nghĩ tác giả có sự nhầm lẫn giữa số nguyên và số tự nhiên. Số tự nhiên là 0, 1, 2...
Sô nguyên thì thêm các số âm -1, -2... nữa
 
Các phép tính cộng và nhân trên số nguyên thì phải ra số nguyên chứ bạn ơi. Mình nghĩ tác giả có sự nhầm lẫn giữa số nguyên và số tự nhiên. Số tự nhiên là 0, 1, 2...
Sô nguyên thì thêm các số âm -1, -2... nữa

Dạ, em hiểu rồi ạ. Em cảm ơn anh nhiều ạ.
 
Web KT

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

Back
Top Bottom