Tìm các trường hợp đối xứng qua tâm (1 người xem)

Liên hệ QC

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

FPT_online

Thành viên hoạt động
Tham gia
27/10/13
Bài viết
133
Được thích
16
Em muốn tìm ra các trường hợp đối xứng qua tâm, Dữ liệu trong file nhập vào chỉ có chữa "H" hoặc chữ "G", nhưng với điều kiện các ô cùng màu thì có giá trị giống nhau, nếu màu vàng bên phải là "H" bên trái cũng phải là "H" và tương tự nếu là "G" thì bên kia cũng phải là "G"Nếu em làm bằng tay thì tìm ra được đối xứng qua tâm sẽ chỉ tìm được với dữ liệu nhỏ, (Em có làm 1 vài VD trong file )Khi lớn dần lên sẽ có rất nhiều trường hợp xảy ra nhờ mọi người chỉ giúp em làm sao tính ra được VD nếu đối xứng 4 lần thì sẽ xảy ra bao nhiêu trường hợp, với tất cả các ô trong đều có thể thay đổi = "G" hoặc = "H", nhưng với điều kiện là bên trái = bên phải theo màuNhờ mọi người giúp em, em cám ơn
 

File đính kèm

Em muốn tìm ra các trường hợp đối xứng qua tâm, Dữ liệu trong file nhập vào chỉ có chữa "H" hoặc chữ "G", nhưng với điều kiện các ô cùng màu thì có giá trị giống nhau, nếu màu vàng bên phải là "H" bên trái cũng phải là "H" và tương tự nếu là "G" thì bên kia cũng phải là "G"Nếu em làm bằng tay...

Tôi hiểu bạn hỏi như sau phần đầu của câu hỏi như sau
Em muốn tìm ra các trường hợp đối xứng qua tâm của các ô. Dữ liệu trong file nhập vào chỉ có chữa "H" hoặc chữ "G" và tạo thành hình dấu ^, nhưng ...

Còn nên thay đối xứng qua tâm thành đối xứng qua đỉnh.

Và cái phần làm bằng tay là làm cái gì, hãy chỉ rõ
+ Hoặc là nhập xong các chữ A, G thì tô màu
+ Hoặc là có chữ rồi chỉ tô màu
+ Hoặc là có màu rồi chỉ thêm chữ vô
+ Hoặc là cái gì khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn xem file & cho biết í kiến nha:
 

File đính kèm

Upvote 0
Bạn xem file & cho biết í kiến nha:
Dạ cái này đúng ý em rồi nhưng em muốn liệt kê ra xem có tất cả bao nhiêu trường hợp được không ạ
VD em muốn kiểm tra cho đối xứng mỗi bên là 5 chữ thì nhập 5 nó sẽ cho ra các kết quả của các lần đối xứng đó ạ
 
Upvote 0
Tôi hiểu bạn hỏi như sau phần đầu của câu hỏi như sau
Em muốn tìm ra các trường hợp đối xứng qua tâm của các ô. Dữ liệu trong file nhập vào chỉ có chữa "H" hoặc chữ "G" và tạo thành hình dấu ^, nhưng ...

Còn nên thay đối xứng qua tâm thành đối xứng qua đỉnh.

Và cái phần làm bằng tay là làm cái gì, hãy chỉ rõ
+ Hoặc là nhập xong các chữ A, G thì tô màu
+ Hoặc là có chữ rồi chỉ tô màu
+ Hoặc là có màu rồi chỉ thêm chữ vô
+ Hoặc là cái gì khác.
Em làm tách ra vậy cho mọi người nhìn dễ phát hiện thôi, có thể cho cùng 1 dòng cũng đc ạ
 
Upvote 0
Dạ cái này đúng ý em rồi nhưng em muốn liệt kê ra xem có tất cả bao nhiêu trường hợp được không ạ
VD em muốn kiểm tra cho đối xứng mỗi bên là 5 chữ thì nhập 5 nó sẽ cho ra các kết quả của các lần đối xứng đó ạ

Vậy thì thay vì mỗi lần hiện chuỗi đối xứng, ta khai thêm 1 biến đếm & tăng biến đếm thêm 1 đơn vị & cho hiện biến đếm này thôi.

Macro còn thiếu câu lệnh:

Nếu không đối xứng về trị cũng như về màu nền thì thoát khỏi vòng lặp. Điều này chắc bạn thêm giúp được, fải không?
 
Upvote 0
Vậy thì thay vì mỗi lần hiện chuỗi đối xứng, ta khai thêm 1 biến đếm & tăng biến đếm thêm 1 đơn vị & cho hiện biến đếm này thôi.

Macro còn thiếu câu lệnh:

Nếu không đối xứng về trị cũng như về màu nền thì thoát khỏi vòng lặp. Điều này chắc bạn thêm giúp được, fải không?
Dạ, em rất muốn học hỏi về cái này nhưng còn chưa biết được, mong thầy cô chỉ giúp em, Em cám ơn nhiều
 
Upvote 0
Vậy ta chuyển sang macro sự kiện tại ô chọn (Validation) [B2], như sau

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [Bi2]) Is Nothing Then
    Dim J As Integer, Dem As Byte
    Const Col As Byte = 61:                    Const Rws As Long = 2
    Dim fStr As String, lStr As String
 
    [BI3].Resize(99).ClearContents
    Do
        J = J + 1
        If Cells(Rws + J, Col + J).Value = "" Then Exit Do
        If Cells(Rws + J, Col + J).Value = Cells(Rws + J, Col - J).Value And _
            Cells(Rws + J, Col + J).Interior.ColorIndex = Cells(Rws + J, Col - J).Interior.ColorIndex Then
            fStr = Cells(Rws + J, Col - J).Value & fStr
            lStr = lStr & Cells(Rws + J, Col + J).Value
            Cells(Rws + J, Col).Value = fStr & CStr(J) & lStr
            If J = Target.Value Then Exit Do
        Else
            Exit Do
        End If
    Loop
 End If
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [Bi2]) Is Nothing Then
    Dim J As Integer, Dem As Byte
    Const Col As Byte = 61:                    Const Rws As Long = 2
    Dim fStr As String, lStr As String
 
    [BI3].Resize(99).ClearContents
    Do
        J = J + 1
        If Cells(Rws + J, Col + J).Value = "" Then Exit Do
        If Cells(Rws + J, Col + J).Value = Cells(Rws + J, Col - J).Value And _
            Cells(Rws + J, Col + J).Interior.ColorIndex = Cells(Rws + J, Col - J).Interior.ColorIndex Then
            fStr = Cells(Rws + J, Col - J).Value & fStr
            lStr = lStr & Cells(Rws + J, Col + J).Value
            Cells(Rws + J, Col).Value = fStr & CStr(J) & lStr
            If J = Target.Value Then Exit Do
        Else
            Exit Do
        End If
    Loop
 End If
End Sub
Em muốn liệt kê ra các dạng đối xứng như trong file được không ạ, em làm phiền quá mong được thầy cô thông cảm
 

File đính kèm

Upvote 0
Hình như bạn liệt kê còn thiếu thì fải?
PHP:
 'Dói Xúng 1:    GHG'
 '               HGH'
 'Dói Xúng 2:   HGHGH'
 '              GGHGG'
 '              GHHHG'
 '              HHHHH'
 '              HHGHH'
 '              GHGHG'
 '              HGGGH'
 '              GGGGG'
 'Dói Xúng 3:  HHGHGHH'
 '             HHHHHHH '
 '              . . . '
 
Upvote 0
Hình như bạn liệt kê còn thiếu thì fải?
PHP:
 'Dói Xúng 1:    GHG'
 '               HGH'
 'Dói Xúng 2:   HGHGH'
 '              GGHGG'
 '              GHHHG'
 '              HHHHH'
 '              HHGHH'
 '              GHGHG'
 '              HGGGH'
 '              GGGGG'
 'Dói Xúng 3:  HHGHGHH'
 '             HHHHHHH '
 '              . . . '
Do có quá nhiều trường hợp xảy ra nên nếu làm thủ công và nhẩm bằng tay sẽ bị thiếu và nhầm lẫn nên em muốn mọi người viết code giúp ạ
 
Upvote 0
Loại đối xứng có liên hệ mật thiết với độ dài chuỗi đối xứng tìm được;
Có lẽ ta cứ liệt kê lên thôi.
 

File đính kèm

Upvote 0
Loại đối xứng có liên hệ mật thiết với độ dài chuỗi đối xứng tìm được;
Có lẽ ta cứ liệt kê lên thôi.
Loại đối xứng có liên hệ mật thiết với độ dài chuỗi đối xứng tìm được;
Có lẽ ta cứ liệt kê lên thôi.
Em đã download file thấy làm giúp nhưng không ra được như này thầy ạ
PHP Code:
'Dói Xúng 1: GHG'
' HGH'
'Dói Xúng 2: HGHGH'
' GGHGG'
' GHHHG'
' HHHHH'
' HHGHH'
' GHGHG'
' HGGGH'
' GGGGG'
'Dói Xúng 3: HHGHGHH'
' HHHHHHH '
' . . . '
 
Upvote 0
Dạ cái này đúng ý em rồi nhưng em muốn liệt kê ra xem có tất cả bao nhiêu trường hợp được không ạ
VD em muốn kiểm tra cho đối xứng mỗi bên là 5 chữ thì nhập 5 nó sẽ cho ra các kết quả của các lần đối xứng đó ạ

Bây giờ tôi mới hiểu ra đối xứng văn bản. Còn màu thì chưa hiểu. Tôi sẽ tính số văn bản tại đây
+ Nếu mỗi bên có n chữ thì văn bản dài 2n + 1 chữ.
+ Bỏ đi 1 bên thì văn bản dài n + 1 chữ.
+ Vậy ta tạo chữ bất kỳ dài n +1 chữ, các chữ chọn ngẫu nhiên trong tập có 2 phần tử là {H, G}
Đây là chỉnh hợp lặp chập (n+1) của 2 => có 2 mũ (n+1) văn bản.
+ Từ các văn bản đã có, ta coi chữ cuối là tâm, đối xứng các chữ trước qua tâm là có văn bản đối xứng n.

Để liệt kê, bạn xem bài
http://www.giaiphapexcel.com/forum/...ần-tử-của-bài-toán-tổ-hợp&p=706198#post706198

Vô tình gần với ví dụ 2, trong đó tập A={H, G}. Tất nhiên bạn phải biết dùng Access hoặc biết 1 chút về câu lệnh SQL.
 
Upvote 0
Bây giờ tôi mới hiểu ra đối xứng văn bản. Còn màu thì chưa hiểu. Tôi sẽ tính số văn bản tại đây
+ Nếu mỗi bên có n chữ thì văn bản dài 2n + 1 chữ.
+ Bỏ đi 1 bên thì văn bản dài n + 1 chữ.
+ Vậy ta tạo chữ bất kỳ dài n +1 chữ, các chữ chọn ngẫu nhiên trong tập có 2 phần tử là {H, G}
Đây là chỉnh hợp lặp chập (n+1) của 2 => có 2 mũ (n+1) văn bản.
+ Từ các văn bản đã có, ta coi chữ cuối là tâm, đối xứng các chữ trước qua tâm là có văn bản đối xứng n.

Để liệt kê, bạn xem bài
http://www.giaiphapexcel.com/forum/...ần-tử-của-bài-toán-tổ-hợp&p=706198#post706198

Vô tình gần với ví dụ 2, trong đó tập A={H, G}. Tất nhiên bạn phải biết dùng Access hoặc biết 1 chút về câu lệnh SQL.
em có đọc bài này nhưng không hiểu tại không biét về acces
 
Upvote 0
Mình có cách này & chả cần thuật toán nào cả. Chi fí là thời gian; tính bằng fút hay giây mà thôi
Bạn tham khảo tại trang 'GPE' cho vui nha!
 

File đính kèm

Upvote 0
Em muốn tìm ra các trường hợp đối xứng qua tâm, Dữ liệu trong file nhập vào chỉ có chữa "H" hoặc chữ "G", nhưng với điều kiện các ô cùng màu thì có giá trị giống nhau, nếu màu vàng bên phải là "H" bên trái cũng phải là "H" và tương tự nếu là "G" thì bên kia cũng phải là "G"Nếu em làm bằng tay thì tìm ra được đối xứng qua tâm sẽ chỉ tìm được với dữ liệu nhỏ, (Em có làm 1 vài VD trong file )Khi lớn dần lên sẽ có rất nhiều trường hợp xảy ra nhờ mọi người chỉ giúp em làm sao tính ra được VD nếu đối xứng 4 lần thì sẽ xảy ra bao nhiêu trường hợp, với tất cả các ô trong đều có thể thay đổi = "G" hoặc = "H", nhưng với điều kiện là bên trái = bên phải theo màuNhờ mọi người giúp em, em cám ơn


trong sheet2 ghi
A1 = 4
B1 = "G"

rồi chạy code này

Mã:
Private arr, lcount As Long


Public Sub hello()
Dim r As Long, centerChar As String
With Sheet2
    centerChar = .[B1]
    .Range("C2:HZ65000").ClearContents
    For r = 1 To .[A1] Step 1
        ReDim arr(1 To 65000, 1 To 1)
        lcount = 0
        fillArray 1, r, "", centerChar
        .Range("A2").Offset(, r + 1).Resize(lcount).Value = arr
    Next
End With
End Sub


Private Sub fillArray(i As Long, maxI As Long, tmp, centerChar As String)
If i <= maxI Then
    fillArray i + 1, maxI, tmp & "G", centerChar
    fillArray i + 1, maxI, tmp & "H", centerChar
Else
    lcount = lcount + 1
    arr(lcount, 1) = tmp & centerChar & StrReverse(tmp)
End If
End Sub
 
Upvote 0
2 ý bài giải cuối cùng đã giúp em được rồi ạ, em cám ơn mọi anh chị và thầy cô rất nhiều đã giúp đỡ giải bài này
 
Upvote 0

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

Back
Top Bottom