Chọn các số trong dãy số để ra 1 số tổng cho trước

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
937
Được thích
571
Chào các anh chị trong diễn đàn.

Tôi có nhu cầu như sau: Tôi có 1 dãy số (gồm nhiều ô, các ô có giá trị bất kỳ). Tôi muốn tìm ra những ô nào trong dãy đó cộng với nhau sẽ ra 1 giá trị cho trước. Mỗi ô chỉ được cộng 1 lần. Không cần tìm hết các phương án thỏa mãn, chỉ cần tìm được 1 đáp án là đạt yêu cầu

Mong mọi người dùng giúp đỡ
 

File đính kèm

  • Book1.xls
    21.5 KB · Đọc: 211
CODE này chạy rất nhanh, nhẹ - thuật giải thật tuyệt vời - Cảm ơn huuthang_bd rất nhiều
Nhưng là Function mới chỉ cho ra 1 đáp án
XIN GIÚP: Giờ muốn chuyển thành Sub để liệt kê hết các đáp án (các hoán vị lệt kê 1 lần) thì sửa code này như nào ?
Bài ở đây dạng liệt kê nè bạn.
 
Upvote 0
Làm thử vầy. Hình như thuật toán này gọi là thuật toán vét cạn.
PHP:
Function SumF(Num As Double, ParamArray Args() As Variant) As String
Dim Data(), Cll As Range, n As Long, k As Long, Arr(), Total As Double
For i = LBound(Args) To UBound(Args)
    For Each Cll In Args(i)
        If Val(Cll.Value) <> 0 Then
            n = n + 1
            ReDim Preserve Data(1 To 2, 1 To n)
            Data(1, n) = Val(Cll.Value)
            Data(2, n) = Cll.Address(0, 0)
        End If
    Next
Next
ReDim Arr(1 To 1)
Arr(1) = 1
Total = Data(1, 1)
n = 1
k = 1
Do While Num <> Total
    If Arr(1) = UBound(Data, 2) Then
        SumF = "#N/A"
        Exit Function
    End If
    If Total > Num Then
        If k = UBound(Data, 2) Then
            k = Arr(n - 1) + 1
            Total = Total - Data(1, Arr(n)) - Data(1, Arr(n - 1)) + Data(1, k)
            n = n - 1
            Arr(n) = k
        Else
            k = k + 1
            Total = Total - Data(1, Arr(n)) + Data(1, k)
            Arr(n) = k
        End If
    Else
        If k = UBound(Data, 2) Then
            k = Arr(n - 1) + 1
            Total = Total - Data(1, Arr(n)) - Data(1, Arr(n - 1)) + Data(1, k)
            n = n - 1
            Arr(n) = k
        Else
            k = k + 1
            Total = Total + Data(1, k)
            n = n + 1
            ReDim Preserve Arr(1 To n)
            Arr(n) = k
        End If
    End If
Loop
For k = 1 To n
    SumF = SumF & "+" & Data(2, Arr(k))
Next
SumF = Replace(SumF, "+", "=", 1, 1)
End Function
a oi đoạn code này ap dung số nguyên thì e tìm ra đáp số, nhưng nếu áp dụng những số mà có thập phân thì có cách nào không ạ!!! chỉ giúp e với ạ
 
Upvote 0
a oi đoạn code này ap dung số nguyên thì e tìm ra đáp số, nhưng nếu áp dụng những số mà có thập phân thì có cách nào không ạ!!! chỉ giúp e với ạ
Theo lý thuyết thì cứ làm cho các số thập phân thành số nguyên, được kết quả rồi chuyển ngược lại.
 
Upvote 0
Theo lý thuyết thì cứ làm cho các số thập phân thành số nguyên, được kết quả rồi chuyển ngược lại.
dạ e cũng thử chuyển đổi rồi mà khi E ap dung đoạn mã nó bị treo máy luôn, a xem giúp e file với a, cam ơn a nhieu ạ!
 

File đính kèm

  • luong t2.xlsx
    14.4 KB · Đọc: 7
Upvote 0
Web KT

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

Back
Top Bottom