Giúp mình tìm chuỗi thỏa điều kiện (mình gọi là tìm chuỗi Bit).

Liên hệ QC

post4life

Thành viên mới
Tham gia
30/10/10
Bài viết
8
Được thích
0
Các bạn giúp mình giải quyết bài toán này với:

Một chuỗi bit được định nghĩa như sau:
Bắt đầu từ dòng đầu tiên trên cùng của bảng dò xuống tới dòng cuối cùng nhé!
Không định nghĩa chuỗi 1 bit.
Chuỗi 2 bit: Bắt đầu là số 1 và một số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 3 bit: Bắt đầu là số 1 và 2 số0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 4 bit: Bắt đầu là số 1 và 3 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
.......................................................
Chuỗi n bit: Bắt đầu là số 1 và n-1 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).

Các bạn chịu khó xem ví dụ minh họa nhé. Một chuỗi luôn bắt đầu là số 1 và kết thúc phải là số khác 0.

Cám ơn các bạn giúp đỡ.
 

File đính kèm

  • Chuoibit.png
    Chuoibit.png
    203.5 KB · Đọc: 15
  • Chuoibit.xlsx
    9.1 KB · Đọc: 11
Các bạn giúp mình giải quyết bài toán này với:

Một chuỗi bit được định nghĩa như sau:
Bắt đầu từ dòng đầu tiên trên cùng của bảng dò xuống tới dòng cuối cùng nhé!
Không định nghĩa chuỗi 1 bit.
Chuỗi 2 bit: Bắt đầu là số 1 và một số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 3 bit: Bắt đầu là số 1 và 2 số0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 4 bit: Bắt đầu là số 1 và 3 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
.......................................................
Chuỗi n bit: Bắt đầu là số 1 và n-1 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).

Các bạn chịu khó xem ví dụ minh họa nhé. Một chuỗi luôn bắt đầu là số 1 và kết thúc phải là số khác 0.

Cám ơn các bạn giúp đỡ.
Nhấn alt + F8 chạy macro trong file đính kèm
Mã:
Option Explicit

Sub dotim()
Dim Nguon
Dim rws, i, j, k

Nguon = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown))
rws = UBound(Nguon)
With CreateObject("Scripting.Dictionary")
    i = 1
    Do While i < rws
        k = 1
        If Nguon(i, 1) = 1 Then
            If Nguon(i + 1, 1) = 0 Then
                k = 1
                For j = i + 1 To rws
                    If Nguon(j, 1) = 0 Then
                        k = k + 1
                    Else
                        Exit For
                    End If
                Next j
                .Item("Chuoi " & k) = .Item("Chuoi " & k) + 1
            End If
        End If
        i = i + k
    Loop
    Sheet1.Range("D2").Resize(.Count, 1) = Application.Transpose(.keys)
    Sheet1.Range("E2").Resize(.Count, 1) = Application.Transpose(.items)
End With
End Sub
 

File đính kèm

  • Chuoibit.xlsb
    15.5 KB · Đọc: 10
Giải thuật dễ dùng:
1. Ghi số thứ tự vào cột bên cạnh.
2. Filter, bỏ số 0
3. copy visible cells vào một mảng (n dòng, 2 cột)
4. đọc mảng. Cứ thấy số 1 ở cột 1 là bắt đầu một số, dòng kế tiếp là kết số ấy (số gì cũng được). Số 0's ở giữa là hiệu số cột 2 trừ 1.
 
Các bạn giúp mình giải quyết bài toán này với:

Một chuỗi bit được định nghĩa như sau:
Bắt đầu từ dòng đầu tiên trên cùng của bảng dò xuống tới dòng cuối cùng nhé!
Không định nghĩa chuỗi 1 bit.
Chuỗi 2 bit: Bắt đầu là số 1 và một số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 3 bit: Bắt đầu là số 1 và 2 số0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 4 bit: Bắt đầu là số 1 và 3 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
.......................................................
Chuỗi n bit: Bắt đầu là số 1 và n-1 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).

Các bạn chịu khó xem ví dụ minh họa nhé. Một chuỗi luôn bắt đầu là số 1 và kết thúc phải là số khác 0.

Cám ơn các bạn giúp đỡ.
Chạy code
Mã:
Sub XYZ()
  Dim dic As Object, sArr(), sRow&, i&, k&
 
  sArr = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown)).Value
  sRow = UBound(sArr)
  With CreateObject("Scripting.Dictionary")
    For i = 3 To sRow
      If sArr(i - 2, 1) = 1 And sArr(i - 1, 1) = 0 Then k = 2
      If k > 0 Then
        If sArr(i, 1) = 0 Then
           k = k + 1
        Else
          .Item("Chuoi " & k) = .Item("Chuoi " & k) + 1
          k = 0
        End If
      End If
    Next i
    i = .Count
    If i > 0 Then
      Sheet1.Range("D2").Resize(i) = Application.Transpose(.keys)
      Sheet1.Range("E2").Resize(i) = Application.Transpose(.items)
    End If
  End With
End Sub
 
Các bạn giúp mình giải quyết bài toán này với:

Một chuỗi bit được định nghĩa như sau:
Bắt đầu từ dòng đầu tiên trên cùng của bảng dò xuống tới dòng cuối cùng nhé!
Không định nghĩa chuỗi 1 bit.
Chuỗi 2 bit: Bắt đầu là số 1 và một số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 3 bit: Bắt đầu là số 1 và 2 số0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
Chuỗi 4 bit: Bắt đầu là số 1 và 3 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).
.......................................................
Chuỗi n bit: Bắt đầu là số 1 và n-1 số 0 ở sau, kết thúc là một số khác 0 (kết thúc là 1, 2, 3, 4,..., gì đó cũng được).

Các bạn chịu khó xem ví dụ minh họa nhé. Một chuỗi luôn bắt đầu là số 1 và kết thúc phải là số khác 0.

Cám ơn các bạn giúp đỡ.
Bạn dùng công thức này ở C2, bấm Ctrl+Shift+Enter
Mã:
C2=SUM(IFERROR(--(FREQUENCY(-ROW($1:$49),-IF($A$2:$A$50,ROW($1:$49),10^6))*($A$2:$A$50=1)=ROW(A2)),))
 
Có lẽ hiểu ý.

Mã:
Sub test()
Dim r As Long, lastRow As Long, start As Long, dulieu(), result(1 To 14, 1 To 1)
    With Sheet1
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        If lastRow < 4 Then Exit Sub
        dulieu = .Range("A2:A" & lastRow).Value
    End With
    start = -10 ^ 6
    For r = 2 To UBound(dulieu, 1) - 1
        If dulieu(r, 1) = 0 Then
            If dulieu(r - 1, 1) = 1 Then start = r - 1
            If dulieu(r + 1, 1) > 0 Then
                If r - start <= 14 Then
                    result(r - start, 1) = result(r - start, 1) + 1
                    start = -10 ^ 6
                End If
            End If
        End If
    Next r
    Sheet1.Range("C2").Resize(UBound(result, 1)).Value = result
End Sub
 
Cám ơn mọi người rất nhiều, dù chưa biết chạy visual thế nào.
 
Web KT
Back
Top Bottom