Sắp xếp số từ 1 tới 100 có bao cặp số gồm 6 chữ số có tổng là 50 (2 người xem)

  • Thread starter Thread starter ssnova
  • Ngày gửi Ngày gửi
Liên hệ QC

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

ssnova

Thành viên mới
Tham gia
7/9/08
Bài viết
12
Được thích
2
Chào anh chị em

Mình nhờ mọi người lập hộ hàm VB nội dung là
từ 1 tới 100 có bao nhiêu kết quả gồm 6 chữ số (không lặp) có tổng là 50 Rồi liệt kê kết quả (6 số )theo cột A B C D E F

Cám ơn ạ
 
Hiểu được chết liền!!!

Muốn làm gì thì diễn đạt cho rõ ràng. Cho thêm cái dấu chấm, dấu phẩy vào để ngắt câu.
Nếu khó diễn đạt thì vui lòng cho cái file lên.

Bài này dễ ợt. Đáp số là 0: từ 1 đến 100 không có số nào 6 chữ số cả.

Mở rộng câu hỏi: tìm các tổ hợp 6 số trong khoảng 1-100 có tổng là 50. Thuật toán vét cạn.

@chủ thớt: loại nài này thì hỏi trong mấy diễn đàn toán hoặc lập trình. Bên ấy người ta có chiên diên về các thuật toán tối ưu.
Nếu cần code VBA thì tải cái code C/Java/Python ấy về đây. Sẽ có người dịch ra VBA giùm cho. Bây giờ bảo tôi đi hỏi giùm bạn thì tôi thà đi uống cà phê chứ khong rảnh đâu.
 
Upvote 0
Tác giả muốn tìm 6 con số từ 1 đến 50 mà có tổng của chúng = 50?

Nếu vậy thì xài 6 vòng lặp, mệt nghỉ!
 
Upvote 0
5 số không trùng nhỏ nhất là 1, 2, 3,4, 5 có tổng là 15. Vậy muốn 6 số không trùng có tổng là 50 thì số thứ 6 là 35
Đề bài toán có thể là
từ 1 tới 35(100) có bao nhiêu kết quả gồm 6 chữ số (không lặp) có tổng là 50 Rồi liệt kê kết quả (6 số )theo cột A B C D E F
Mình nghĩ thế thôi
Híc
 
Upvote 0
5 số không trùng nhỏ nhất là 1, 2, 3,4, 5 có tổng là 15. Vậy muốn 6 số không trùng có tổng là 50 thì số thứ 6 là 35
Đề bài toán có thể là

Mình nghĩ thế thôi
Híc

Đó là khởi đầu của 1 trong những thuật toán.
Bạn khởi đầu bằng 1,2,3,4,5,35. Bốc 1 của 35 cho vào nhóm 5 còn lại. 1,2,3,4,6,34; cho đến 1,2,3,4,19,21.
1,2,3,4,n với n tiếp tục bốc vào nhóm 1,2,3,4 ...
----> Đệ quy phi tuyến. Đó là tại sao tôi bảo chủ thớt tìm vào mấy góc thủ thuật lập trình toán mà hỏi. Ở đây là góc VBA, lập trình ứng dụng.
 
Upvote 0
Chào anh chị em

Mình nhờ mọi người lập hộ hàm VB nội dung là
từ 1 tới 100 có bao nhiêu kết quả gồm 6 chữ số (không lặp) có tổng là 50 Rồi liệt kê kết quả (6 số )theo cột A B C D E F

Cám ơn ạ
Từ 1 đến 100 không có số nào có 6 chữ số cả.
 
Upvote 0
Xin lỗi các bạn khả năng diễn đạt mình hơi kém làm mọi người hiểu lầm. File đính kèm có ví dụ
Bài toán cho 100 số từ 1 tới 100. Liệt kê có bao nhiêu tổ hợp gồm 6 chữ số (không trùng) có tổng là 100.
 

File đính kèm

Upvote 0
Xin lỗi các bạn khả năng diễn đạt mình hơi kém làm mọi người hiểu lầm. File đính kèm có ví dụ
Bài toán cho 100 số từ 1 tới 100. Liệt kê có bao nhiêu tổ hợp gồm 6 chữ số (không trùng) có tổng là 100.
Bài #1 đòi tổng =50, bài này đòi tổng =100, bài sau nữa đòi tổng =?xxx

"Liệt kê có bao nhiêu tổ hợp gồm 6 chữ số (không trùng)": Bỏ "chữ" là chuẩn men!
 
Upvote 0
Bài #1 đòi tổng =50, bài này đòi tổng =100, bài sau nữa đòi tổng =?xxx

"Liệt kê có bao nhiêu tổ hợp gồm 6 chữ số (không trùng)": Bỏ "chữ" là chuẩn men!
50 sửa thành 100 thì cũng không vấn đề gì. Số 6 sửa thành số khác mới căng :D.
PHP:
Sub A()
ActiveSheet.UsedRange.Clear
Dim Tong As Long, i1 As Long, i2 As Long, i3 As Long, i4 As Long, i5 As Long, i6 As Long
For i1 = 1 To 95
    Tong = i1
    If Tong + i1 * 5 + 15 > 100 Then Exit For
    For i2 = i1 + 1 To 96
        Tong = Tong + i2
        If Tong + i2 * 4 + 10 > 100 Then Exit For
        For i3 = i2 + 1 To 97
            Tong = Tong + i3
            If Tong + i3 * 3 + 6 > 100 Then Exit For
            For i4 = i3 + 1 To 98
                Tong = Tong + i4
                If Tong + i4 * 2 + 3 > 100 Then Exit For
                For i5 = i4 + 1 To 99
                    Tong = Tong + i5
                    If Tong + i5 + 1 > 100 Then Exit For
                    For i6 = i5 + 1 To 100
                        Tong = Tong + i6
                        If Tong = 100 Then
                            With Cells(&H10000, 1).End(xlUp).Offset(1)
                                .Value = i1
                                .Offset(, 1).Value = i2
                                .Offset(, 2).Value = i3
                                .Offset(, 3).Value = i4
                                .Offset(, 4).Value = i5
                                .Offset(, 5).Value = i6
                            End With
                        ElseIf Tong > 100 Then
                            Exit For
                        End If
                        Tong = Tong - i6
                    Next
                    Tong = Tong - i5
                Next
                Tong = Tong - i4
            Next
            Tong = Tong - i3
        Next
        Tong = Tong - i2
    Next
    Tong = Tong - i1
Next
End Sub
 
Upvote 0
Bạn huuthang_bd ơi mình thấy bị thiếu khá nhiều kết quả. bạn xem file đính kèm nhé
cảm ơn nhiều
 

File đính kèm

Upvote 0
Bài #11 thành số 5 rồi kìa anh :D
Vẫn còn 6 mà :)
Bạn huuthang_bd ơi mình thấy bị thiếu khá nhiều kết quả. bạn xem file đính kèm nhé
cảm ơn nhiều
Tôi nhầm. Bạn thử cái này:
PHP:
Sub A()
ActiveSheet.UsedRange.Clear
Dim Tong As Long, i1 As Long, i2 As Long, i3 As Long, i4 As Long, i5 As Long, i6 As Long
For i1 = 1 To 95
    If Tong + i1 * 6 + 15 > 100 Then Exit For
    Tong = i1
    For i2 = i1 + 1 To 96
        If Tong + i2 * 5 + 10 > 100 Then Exit For
        Tong = Tong + i2
        For i3 = i2 + 1 To 97
            If Tong + i3 * 4 + 6 > 100 Then Exit For
            Tong = Tong + i3
            For i4 = i3 + 1 To 98
                If Tong + i4 * 3 + 3 > 100 Then Exit For
                Tong = Tong + i4
                For i5 = i4 + 1 To 99
                    If Tong + i5 + 2 > 100 Then Exit For
                    Tong = Tong + i5
                    For i6 = i5 + 1 To 100
                        If Tong + i6 > 100 Then Exit For
                        Tong = Tong + i6
                        If Tong = 100 Then
                            With Cells(&H10000, 1).End(xlUp).Offset(1)
                                .Value = i1
                                .Offset(, 1).Value = i2
                                .Offset(, 2).Value = i3
                                .Offset(, 3).Value = i4
                                .Offset(, 4).Value = i5
                                .Offset(, 5).Value = i6
                            End With
                        End If
                        Tong = Tong - i6
                    Next
                    Tong = Tong - i5
                Next
                Tong = Tong - i4
            Next
            Tong = Tong - i3
        Next
        Tong = Tong - i2
    Next
    Tong = Tong - i1
Next
End Sub
 
Upvote 0
Xin lỗi các bạn khả năng diễn đạt mình hơi kém làm mọi người hiểu lầm. File đính kèm có ví dụ
Bài toán cho 100 số từ 1 tới 100. Liệt kê có bao nhiêu tổ hợp gồm 6 chữ số (không trùng) có tổng là 100.
Góp thêm code
Mã:
Sub GPE()
Dim Tong As Long, Xi As Long, Arr(1 To 1000000, 1 To 6) As Long
Dim i1 As Long, i2 As Long, i3 As Long, i4 As Long, i5 As Long, i6 As Long
ActiveSheet.UsedRange.Clear
Tong = 100
Xi = Int((Tong - 15) / 6)
For i1 = 1 To xi
  Xi = Int((Tong - i1 - 10) / 5)
  For i2 = i1 + 1 To Xi
    Xi = Int((Tong - i1 - i2 - 6) / 4)
    For i3 = i2 + 1 To Xi
      Xi = Int((Tong - i1 - i2 - i3 - 3) / 3)
      For i4 = i3 + 1 To Xi
        Xi = Int((Tong - i1 - i2 - i3 - i4 - 1) / 2)
        For i5 = i4 + 1 To Xi
          i6 = Tong - i1 - i2 - i3 - i4 - i5
          If k = 1000000 Then GoTo Thoat
          k = k + 1
          Arr(k, 1) = i1: Arr(k, 2) = i2
          Arr(k, 3) = i3: Arr(k, 4) = i4
          Arr(k, 5) = i5: Arr(k, 6) = i6
        Next
      Next
    Next
  Next
Next
Thoat:
Range("A2").Resize(k, 6) = Arr
End Sub
 

File đính kèm

Upvote 0
Hình như cuối cùng bài toán đưa về dạng : liệt kê những nhóm gồm 6 phần tử lấy ra từ 85 phần tử từ 1 đến 85 ( tổ hợp chặp 6 của 85 phần tử) thỏa điều kiện là tổng bằng 100
Cũng may là chủ topic ra đề là " chặp 6" chứ nếu chặp..... 30 thì code phải khai báo bao nhiêu biến & chạy bao nhiêu vòng lặp nhỉ ?
Híc, nhìn muốn...tỉnh luôn, mà nếu nó là chỉnh hợp lặp thì sao nhỉ ?
Xỉn quá, có gì sai xin các bạn bỏ qua
Thân
 
Upvote 0
...
Cũng may là chủ topic ra đề là " chặp 6" chứ nếu chặp..... 30 thì code phải khai báo bao nhiêu biến & chạy bao nhiêu vòng lặp nhỉ ?
Híc, nhìn muốn...tỉnh luôn, mà nếu nó là chỉnh hợp lặp thì sao nhỉ ?
...

Đã phân tích rồi. Đây là dạng đệ quy phi tuyến. Đối với dân ứng dụng thì khó chứ dân lập trình toán thì những cái này chỉ là bài tập căn bản.
Chặp 30 thì có đệ quy có khả năng vỡ bộ nhớ.
Chỉnh hợp lặp thì cũng đại khái vậy thôi.
 
Upvote 0
Các ơn các bác giúp đỡ.
Khi mình thử thay đổi tổng 6 số là 110 thì kết quả trả về
1 2 3 4 5 108 (108 nằm ngoài khoảng số đã cho từ 1..100 mất rồi)
Vậy có cách nào liệt kê tổng quát được kết quả có tổng 6 số trong khoảng từ 90,91,92..99 được không
VD thỏa mãn tổng mix : 90 và Tổng max: 99
xin chân thành cảm ơn
 
Upvote 0
Các ơn các bác giúp đỡ.
Khi mình thử thay đổi tổng 6 số là 110 thì kết quả trả về
1 2 3 4 5 108 (108 nằm ngoài khoảng số đã cho từ 1..100 mất rồi)
Vậy có cách nào liệt kê tổng quát được kết quả có tổng 6 số trong khoảng từ 90,91,92..99 được không
VD thỏa mãn tổng mix : 90 và Tổng max: 99
xin chân thành cảm ơn
Bạn thử code của "bác" nào?
Trường hợp bạn nói là một bài toán khác chứ không phải tổng quát. Nếu hỏi ngay từ đầu thì tôi làm thử còn thay đổi thì không. Ai dám chắc được đây là lần thay đổi cuối cùng :)
 
Upvote 0
Bạn thử code của "bác" nào?
Trường hợp bạn nói là một bài toán khác chứ không phải tổng quát. Nếu hỏi ngay từ đầu thì tôi làm thử còn thay đổi thì không. Ai dám chắc được đây là lần thay đổi cuối cùng :)

Chính chủ thớt cũng không dám chắc luôn.
Nhìn cách trình bày ở bài #1 thì biết còn nhiều thay đổi. Đến bây giờ mới nhận ra thì đã "lỡ bước sang ngang" rồi.

Nhưng mà có sao đâu. Cái nghiệp code giùm nó như chích sì ke, biết khổ chủ làm khó nhưng vẫn chích cho qua cơn ghiền.
 
Upvote 0
Web KT

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

Back
Top Bottom