Xin hàm liệt kê tất cả số tổ hợp chuỗi 10 ký tự tạo nên từ hai ký tự A và B (1 người xem)

Liên hệ QC

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

Toán đại số nhị phân: A là 0, B là 1 thì 10 chữ số tức là 1024 số.
Theo lẽ thì hàm DEC2có thể làm ngon lành. Nhưng rất tiếc hàm này chỉ làm việc với số 0-511 (512 số đầu). Vì vậy phải cần thêm thủ thuật cho 512-1024

=IF(ROW()<=512, "A", "B") & SUBSTITUTE(SUBSTITUTE(DEC2BIN(MOD(ROW()-1,512),9), "0", "A"), "1", "B")
Kéo từ dòng 1 đến 1024
 
Toán đại số nhị phân: A là 0, B là 1 thì 10 chữ số tức là 1024 số.
Theo lẽ thì hàm DEC2có thể làm ngon lành. Nhưng rất tiếc hàm này chỉ làm việc với số 0-511 (512 số đầu). Vì vậy phải cần thêm thủ thuật cho 512-1024

=IF(ROW()<=512, "A", "B") & SUBSTITUTE(SUBSTITUTE(DEC2BIN(MOD(ROW()-1,512),9), "0", "A"), "1", "B")
Kéo từ dòng 1 đến 1024

Xin cảm ơn công thức của bác, nhưng nếu trường hợp cần tạo thành dãy nhiều ký tự hơn, tầm trên 20 ký tự thì có cách gì không bác?
 
Xin cảm ơn công thức của bác, nhưng nếu trường hợp cần tạo thành dãy nhiều ký tự hơn, tầm trên 20 ký tự thì có cách gì không bác?
Viết hàm tự tạo Dec2Bin, ví dụ:
Mã:
Function D2B(ByVal Num As Long, Optional ByVal Places As Long = 1) As String
  Dim qt As Long, rd As Long, Tmp As String
  qt = Num
  Do
    rd = qt Mod 2
    qt = Int(qt / 2)
    Tmp = rd & Tmp
  Loop Until qt = 0
  D2B = Format(Val(Tmp), String(Places, "0"))
End Function
Rồi cứ thế mà kéo fill trên bảng tính theo công thức sau:
Mã:
=SUBSTITUTE(SUBSTITUTE(d2b(ROW(A1),10),0,"A"),1,"B")
------------------------------------------------------------------------
Cái này sao thấy giống giống dò tìm password protect sheet quá ta?
 
Xin cảm ơn công thức của bác, nhưng nếu trường hợp cần tạo thành dãy nhiều ký tự hơn, tầm trên 20 ký tự thì có cách gì không bác?
20 ký tự
Mã:
=SUBSTITUTE(SUBSTITUTE(DEC2BIN(INT((ROW()-1)/262144),2)&DEC2BIN(MOD(INT((ROW()-1)/512),512),9)&DEC2BIN(MOD(ROW()-1,512),9),0,"A"),1,"B")
23 ký tự
Mã:
=SUBSTITUTE(SUBSTITUTE(DEC2BIN(INT((ROW()-1)/262144),5)&DEC2BIN(MOD(INT((ROW()-1)/512),512),9)&DEC2BIN(MOD(ROW()-1,512),9),0,"A"),1,"B")
 
Chắc người hỏi, chỉ hỏi cho vui: không hiểu cái này ứng dụng vào đâu? mà phải liệt kê ra hết cỡ ngần đó số.
Xem bài #8.
Cái vụ AB này người ta dùng để phá password của Excel. Nhưng tôi nhớ thì hình như chỉ cần tới 8 ký tự, Excel cắt bỏ phần còn lại.
 
Viết hàm tự tạo Dec2Bin, ví dụ:
Mã:
Function D2B(ByVal Num As Long, Optional ByVal Places As Long = 1) As String
  Dim qt As Long, rd As Long, Tmp As String
  qt = Num
  Do
    rd = qt Mod 2
    qt = Int(qt / 2)
    Tmp = rd & Tmp
  Loop Until qt = 0
  D2B = Format(Val(Tmp), String(Places, "0"))
End Function
Rồi cứ thế mà kéo fill trên bảng tính theo công thức sau:
Mã:
=SUBSTITUTE(SUBSTITUTE(d2b(ROW(A1),10),0,"A"),1,"B")
------------------------------------------------------------------------
Cái này sao thấy giống giống dò tìm password protect sheet quá ta?
Xin cảm ơn code của bác ndu96081631 nhiều ạ!
Bài đã được tự động gộp:

Trước khi hỏi thì bạn có đoán thử 20 ký tự sẽ cho ra bao nhiêu kết quả chưa?

Mình biết số tổ hợp sẽ là 2^(số ký tự mỗi số), nên mới hỏi ví dụ trên 20 ký tự nó vượt qua giới hạn số dòng của excel thì có cách gì xử lý không ý mà.
Bài đã được tự động gộp:

Chắc người hỏi, chỉ hỏi cho vui: không hiểu cái này ứng dụng vào đâu? mà phải liệt kê ra hết cỡ ngần đó số.

Mình đang có bài toán: cho một dãy số và 1 tổng là tổng của một vài số trong dãy số đó, cần tìm các số tạo nên tổng đó bạn à.
 
Bao nhiêu ký tự cũng được. Muốn bao nhiêu ký tự thì nhập vào A1 bấy nhiêu chữ A. Công thức sau áp dụng cho chuỗi từ 100 ký tự trở xuống.
Mã:
A2=LEFT(REPLACE(A1,MATCH(2,1/(MID(A1,ROW($1:$100),1)="A")),100,"B"&REPT("A",100)),LEN(A1))
 
Ở đây có tiết mục treo củ cải đầu cái sào rồi.


1606190509052.png

----
@Thớt:
Từ khóa: Solver.
 
Bao nhiêu ký tự cũng được. Muốn bao nhiêu ký tự thì nhập vào A1 bấy nhiêu chữ A. Công thức sau áp dụng cho chuỗi từ 100 ký tự trở xuống.
Mã:
A2=LEFT(REPLACE(A1,MATCH(2,1/(MID(A1,ROW($1:$100),1)="A")),100,"B"&REPT("A",100)),LEN(A1))
Xin cảm ơn công thức của bác rất nhiều ạ!
Bài đã được tự động gộp:

Ủa, sao mình không đi thẳng vào vấn đề ngay từ đầu luôn?
Mình đang làm bị vướng ở phần này nên hỏi phần này, phần này mình hỏi được rồi mình nghĩ phần sau có thể tự làm bạn ạ, cảm ơn bạn :)
 
Bạn đừng hiểu lầm, bài toán của mình là: cho một dãy số và 1 tổng là tổng của một vài số trong dãy số đó, cần tìm các số tạo nên tổng đó.
Chính bạn dẫn dăt người ta hiểu lầm. Hai bài toán ấy khác nhau một trời một vực.
Một bên là bài toán Đại số nhị phân (hoàn toàn lô gic 0-1)
Bên kia là bài toán Ba lô (Knapsack problem, bài toán khởi phát thức)
 
Xin cảm ơn công thức của bác rất nhiều ạ!
Bài đã được tự động gộp:


Mình đang làm bị vướng ở phần này nên hỏi phần này, phần này mình hỏi được rồi mình nghĩ phần sau có thể tự làm bạn ạ, cảm ơn bạn :)
Nếu đi thẳng vào vấn đề thì loại đi rất nhiều tổ hợp không thỏa mãn, và có cần đến bài toán tổ hợp hay không nữa.
 
Chính bạn dẫn dăt người ta hiểu lầm. Hai bài toán ấy khác nhau một trời một vực.
Một bên là bài toán Đại số nhị phân (hoàn toàn lô gic 0-1)
Bên kia là bài toán Ba lô (Knapsack problem, bài toán khởi phát thức)

Do cách làm của em có liên quan bác ạ, mục đích em tìm các tổ hợp của 0 và 1 để liệt kê tất cả các trường hợp có thể có, 1 thì tính số hạng đó vào tổng, 0 thì không tính, để xem kết quả nào phù hợp với Tổng cho trước.
 
Tự nhiên quên mất hàm BASE. Dù bài toán đã được dẫn đi hướng khác như vẫn cứ đưa lên, ai áp dụng được gì thì áp dụng:
Mã:
=SUBSTITUTE(SUBSTITUTE(BASE(ROW(A1),2,20),0,"A"),1,"B")
Số 20 là chiều dài chuỗi, thay nó thành bao nhiêu tùy ý
 
Nếu đi thẳng vào vấn đề thì loại đi rất nhiều tổ hợp không thỏa mãn, và có cần đến bài toán tổ hợp hay không nữa.
Vâng do Excel em cũng mới tập tành nên vừa học vừa hỏi vậy bác ạ, vậy có cách nào không cần dùng đến cách liệt kê tổ hợp vậy không bác?
Bài đã được tự động gộp:

Tự nhiên quên mất hàm BASE. Dù bài toán đã được dẫn đi hướng khác như vẫn cứ đưa lên, ai áp dụng được gì thì áp dụng:
Mã:
=SUBSTITUTE(SUBSTITUTE(BASE(ROW(A1),2,20),0,"A"),1,"B")
Số 20 là chiều dài chuỗi, thay nó thành bao nhiêu tùy ý
Toàn công thức hay, cảm ơn bác nhiều ạ!
 
Chính bạn dẫn dăt người ta hiểu lầm. Hai bài toán ấy khác nhau một trời một vực.
Một bên là bài toán Đại số nhị phân (hoàn toàn lô gic 0-1)
Bên kia là bài toán Ba lô (Knapsack problem, bài toán khởi phát thức)
Ý người ta chắc thế này bác ạ. Vd. người ta có 10 (20) số cho trước a1, a2, ..., a10. Người ta muốn chọn ra "vài số" sao cho tổng của chúng bằng số S cho trước. Tức có thể viết:

b1*a1 + b2*a2 + ... + b10*a10 = S, trong đó b1, b2, ..., b10 lấy giá trị 0 hoặc 1. Nếu bx = 0, với x = 1, 2, ..., 10, thì có nghĩa là ax không có mặt trong "vài số" cần tìm.

Người ta bây giờ nhờ giúp liệt kê ra 1024 nhóm 10 ký tự nhị phân. Sau đó tính lần lượt 1024 tổng b1*a1 + b2*a2 + ... + b10*a10 và so sánh với S.

Chỉ là nếu thế thì dụng ý biến 0, 1 thành A, B để làm gì.
 
Vâng do Excel em cũng mới tập tành nên vừa học vừa hỏi vậy bác ạ, vậy có cách nào không cần dùng đến cách liệt kê tổ hợp vậy không bác?
Có bài nói trên kia rồi đó, bạn dùng SOLVER của Excel nhé, và các cách khác, nhưng Solver là đơn giản và nhanh
 
...
Chỉ là nếu thế thì dụng ý biến 0, 1 thành A, B để làm gì.
Tối hôm qua thì nó là dạng phá password Excel.
Hai tiếng đồng hồ sau nó chuyển thành dạng chọn sequence tài xỉu/đen đỏ.
Sáng nay nó thành dạng Knapsack.
Dự là tối nay nó ló ra dạng đánh đề?
 
Tối hôm qua thì nó là dạng phá password Excel.
Hai tiếng đồng hồ sau nó chuyển thành dạng chọn sequence tài xỉu/đen đỏ.
Sáng nay nó thành dạng Knapsack.
Dự là tối nay nó ló ra dạng đánh đề?
Thật thế? Tôi không đọc hết các bài nên không biết.
 
Ý người ta chắc thế này bác ạ. Vd. người ta có 10 (20) số cho trước a1, a2, ..., a10. Người ta muốn chọn ra "vài số" sao cho tổng của chúng bằng số S cho trước. Tức có thể viết:

b1*a1 + b2*a2 + ... + b10*a10 = S, trong đó b1, b2, ..., b10 lấy giá trị 0 hoặc 1. Nếu bx = 0, với x = 1, 2, ..., 10, thì có nghĩa là ax không có mặt trong "vài số" cần tìm.

Người ta bây giờ nhờ giúp liệt kê ra 1024 nhóm 10 ký tự nhị phân. Sau đó tính lần lượt 1024 tổng b1*a1 + b2*a2 + ... + b10*a10 và so sánh với S.

Chỉ là nếu thế thì dụng ý biến 0, 1 thành A, B để làm gì.

Chính xác là bài toán này đó bác, thực chất lúc đầu em không nghĩ ra cái khái niệm 10 ký tự nhị phân đó, mà em hay có thói quen dùng ký tự chữ hơn là ký tự số nên mới chọn A với B đưa vào đề bài, cảm ơn bác và mọi người đã giúp đỡ ạ!
Bài đã được tự động gộp:

Có bài nói trên kia rồi đó, bạn dùng SOLVER của Excel nhé, và các cách khác, nhưng Solver là đơn giản và nhanh

Vâng cảm ơn ý kiến của bác nhiều ạ!
 

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

Back
Top Bottom