Thứ nhất: không viết hoa toàn bộ tiêu đề (quy định của diễn đàn)Mình cần xin hàm liệt kê chi tiết được. Tổ hợp 6 ký tự từ 26 chữ cái. Ví dụ: AAAAAA, AAAAAB,........ZZZZZZ
và Tổ hợp 8 ký tự bao gồm số và chữ cái. Rất mong được mọi người hỗ trợ ạ! Em cảm ơn rất nhiều ạ!
Chắc là bạn hỏi chơi, chắc để đi dò mật khẩu quá.Tổ hợp 6 ký tự từ 26 chữ cái. Ví dụ: AAAAAA, AAAAAB,........ZZZZZZ
và Tổ hợp 8 ký tự bao gồm số và chữ cái
Dạng bài này dùng thuật toán "Đệ quy quay lui " là gọn gàng về code nhất;Mình cần xin hàm liệt kê chi tiết được. Tổ hợp 6 ký tự từ 26 chữ cái. Ví dụ: AAAAAA, AAAAAB,........ZZZZZZ
và Tổ hợp 8 ký tự bao gồm số và chữ cái. Rất mong được mọi người hỗ trợ ạ! Em cảm ơn rất nhiều ạ!
Option Explicit
Public Arr, Result, k&
Sub Try(ByVal i As Long)
Dim item, j
For Each item In Arr
Result(i) = item
If i = 5 Then
If k <= 1048575 Then
Range("A1").Offset(k) = Join(Result, "")
k = k + 1
End If
Else
Try i + 1
End If
Next
End Sub
Sub main()
Dim tmpArr, s
k = 0
s = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,W,X,Y,Z"
Arr = Split(s, ",")
ReDim Result(0 To 5)
Try 0
'MsgBox str
End Sub
Loại bài này không phải là thuật toán tìm tổ hợp. Chúng cói cả đống trên mạng, mọi ngôn ngữ.Dạng bài này dùng thuật toán "Đệ quy quay lui " là gọn gàng về code nhất;
ví dụ code để tổ hợp 6 ký tự từ 26 chữ cái ( chạy sub main() kết quả hiện ở cột A sheet hiện hành)
...
Thông thường dạng toán liệt kê tổ hợp đi kèm với điều kiện biên nào đó để tránh quá tải không cần thiết: ví dụ khi tìm được 1 cấu hình được tổ hợp 6 ký tự từ 26 chữ cái , Tiến hành kiểm tra cấu hình đó nếu thỏa mãn điều kiện dừng đệ quy
Dạng bài này dùng thuật toán "Đệ quy quay lui " là gọn gàng về code nhất;
ví dụ code để tổ hợp 6 ký tự từ 26 chữ cái ( chạy sub main() kết quả hiện ở cột A sheet hiện hành)
Thông thường dạng toán liệt kê tổ hợp đi kèm với điều kiện biên nào đó để tránh quá tải không cần thiết: ví dụ khi tìm được 1 cấu hình được tổ hợp 6 ký tự từ 26 chữ cái , Tiến hành kiểm tra cấu hình đó nếu thỏa mãn điều kiện dừng đệ quyMã:Option Explicit Public Arr, Result, k& Sub Try(ByVal i As Long) Dim item, j For Each item In Arr Result(i) = item If i = 5 Then If k <= 1048575 Then Range("A1").Offset(k) = Join(Result, "") k = k + 1 End If Else Try i + 1 End If Next End Sub Sub main() Dim tmpArr, s k = 0 s = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,W,X,Y,Z" Arr = Split(s, ",") ReDim Result(0 To 5) Try 0 'MsgBox str End Sub
Option Explicit
Public Arr, item, k&, c%, z$()
Sub Try(ByVal count%, Optional ByVal i = 1)
Dim a, j
For Each a In Arr
Mid$(item, i, 1) = a
If i = count Then
k = k + 1: z(k, 1) = item
If k >= 1048576 Then
DoEvents
Range("A1")(1, c).Resize(1048576, 1) = z
k = 0: c = c + 1
ReDim z(1 To 1048576, 1 To 1)
End If
Else
Try count, i + 1
End If
Next
End Sub
Sub main()
Dim tmpArr, s
k = 0: c = 1
s = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
Arr = Split(s, ","): item = String$(6, "A")
ReDim z(1 To 1048576, 1 To 1)
Try 6
If k > 0 Then
Range("A1")(1, c).Resize(1048576, 1) = z
End If
Erase z
'MsgBox str
End Sub