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

Liên hệ QC

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

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 ạ.
Tất cả các tham số tính TU đều là nguyên thì kết quả phải là nguyên thôi bạn.
Có điều là từ đầu bạn không nói rõ là nguyên nhưng không giới hạn âm hay dương nên các code trên trả lời thiếu đáp án.
 
Tất cả các tham số tính TU đều là nguyên thì kết quả phải là nguyên thôi bạn.
Có điều là từ đầu bạn không nói rõ là nguyên nhưng không giới hạn âm hay dương nên các code trên trả lời thiếu đáp án.

Dạ, em cảm ơn anh ạ. Em chạy solver kết quả ra các biến đều theo bài #2 (nguyên dương), bài #16 em thấy anh ra cả nguyên âm. Anh chạy solver ra ạ?
 
Liệt kê kết quả giới hạn từ -10 tới 10, tối đa 1000 dòng kết quả nếu vượt sẽ báo lỗi
Mã:
Sub XYZ()
  Dim Res(), k&, dMin&
  Dim m&, n&, g&, h&, j&, T1&, T2&, T3&, T4&, T5&
  Const Y# = 684
  Const xLow& = -10
  Const xUp& = 10

  dMin = 10000000
  For m = xLow To xUp
    T1 = m * 275 - Y
    If T1 > 0 Then Call AddRes(Res, k, dMin, T1, m): Exit For
    For n = xLow To xUp
      T2 = T1 + n * 75
      If T2 > 0 Then Call AddRes(Res, k, dMin, T2, m, n): Exit For
      For g = xLow To xUp
        T3 = T2 + g * 157
        If T3 > 0 Then Call AddRes(Res, k, dMin, T3, m, n, g): Exit For
        For h = xLow To xUp
          T4 = T3 + h * 163
          If T4 > 0 Then Call AddRes(Res, k, dMin, T4, m, n, g, h): Exit For
          For j = xLow To xUp
            T5 = T4 + j * 126
            If T5 > 0 Then Call AddRes(Res, k, dMin, T5, m, n, g, h, j): Exit For
          Next j
        Next h
      Next g
    Next n
  Next m
  Range("A3:E3").Resize(k) = Res
End Sub

Private Sub AddRes(Res, k, dMin, ByVal d&, ByVal m&, Optional ByVal n& = 0, _
            Optional ByVal g& = 0, Optional ByVal h& = 0, Optional ByVal j& = 0)
    If d < dMin Then
      ReDim Res(1 To 1000, 1 To 6)
      dMin = d: k = 1
      Res(k, 1) = m: Res(k, 2) = n: Res(k, 3) = g
      Res(k, 4) = h: Res(k, 5) = j ': Res(k, 6) = d
    ElseIf d = dMin Then
      k = k + 1
      Res(k, 1) = m: Res(k, 2) = n: Res(k, 3) = g
      Res(k, 4) = h: Res(k, 5) = j ': Res(k, 6) = d
    End If
End Sub
 
Code đơn giản sau sẽ giải được phương trình ax+by=1, trong đó a, b là 2 số tự nhiên nguyên tố cùng nhau (ở đây mình chọn a=75, b=157). Chứng minh thuật toán đúng cũng không khó, chỉ cần kiến thức số học lớp 6.
Mã:
Option Explicit
Sub test()
    Dim a&, b&, x&, y&, i&, n&, arr()
    a = 75
    b = 157
    Do While a > 1 And b > 1
        n = n + 1
        ReDim Preserve arr(1 To n)
        If a > b Then
            a = a - b
            arr(n) = 1
        Else
            b = b - a
            arr(n) = 0
        End If
    Loop
    If a = 1 Then
        x = 1
        y = 0
    Else
        x = 0
        y = 1
    End If
    For i = n To 1 Step -1
        If arr(i) = 0 Then x = x - y Else y = y - x
    Next
    Debug.Print x
    Debug.Print y
End Sub
Chạy thử ta được x=67, y=-32. Từ đó phương trình 275 * m + 75 * n + 157 * g + 163 * h + 126 * j - 684=1 sẽ có vô số nghiệm là m=0, n=67*685, g=-32*685, h=126*k, j=-163*k (k là các số nguyên).
 
chắc muốn chứng minh là đã học hết lớp 6 đây mà, khổ vậy
 
Mình không thể hiện gì mấy bài này. Do có bạn nhắn tin hỏi nên mình trả lời luôn. Gõ code nhanh hơn là lý giải.
 
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
Thớt không có căn bản về toán số. Bài này lại gọi là "thống kê"
Ở bài #10, thớt nói "TU > 0 thôi. Chứ k cần nguyên [sic]". Nếu tôi tạm hiểu k là từ "không" thì điều kiện này hoàn toàn không cần. Các thừa số đều là nguyên thì giá trị biểu thức đương nhiên phải nguyên.

Chú về lập trình:
Theo toán số thì bài này ai lại đặt m,n, rồi còn nhảy g,h,j nữa. Chả có một trật tự gì cả.
Đặt tên theo lập trình thì phải là
Dim a As Variant
Dim k(0 To 5) As Long ' k(0) luôn luôn là 1
a = Array( -684, 126, 163, 157, 75, 275 )
 
Web KT

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

Back
Top Bottom