vui chơi có thưởng

Liên hệ QC
Góp vui
Mã:
Sub ABC()
  Dim KetQua$, DaySo$, i&, r&, N&
  DaySo = "123456789"
  N = Len(DaySo)
  Randomize
  Do
    If i = N Then i = 1 Else i = i + 1
    r = Int(Rnd() * N + 1)
    tmp = Mid(DaySo, r, 1)
    Mid(DaySo, r, 1) = Mid(DaySo, i, 1)
    Mid(DaySo, i, 1) = tmp
    KetQua = Format(DaySo, "0/00+0/00+0/00")
  Loop Until Evaluate("=" & KetQua) = 1
  Range("A2") = KetQua
End Sub
 
Theo tôi thì có hai điều:

1. thuật toán vét cạn bài này tương đối dễ
ở đây ta chỉ có 1-9, tức là có thể gom trong kiểu Long
thử từ số nhỏ nhất là 123456789 đến 987654321 là khoảng 860 triệu lượt. Tuy phải lặp nhiều lần nhưng thuật toán đơn giản.
như vậy chỉ cần 2 hàm phụ:
Hàm phụ 1: xét chuỗi số không có chữ số lặp lại. Hàm này, nếu đem số thử cộng thêm "0" thì nó sẽ loại luôn các số có chứa "0".
Hàm phụ 2: xét chuỗi số có thoả phương trình.

2. thuật toán tính a/bc + d/ef + g/hi = 1 khá nguy hiểm. Nếu bạn làm ra đáp số thì do may mắn thôi.
Thứ nhất:
con toán chia có thể sẽ ra số lẻ. Tổng lại có thể không bao giờ chính xác là 1.
Thứ hai:
may mắn thì không có con số gần đúng. Nếu gặp bài toán khác có thể bị gần đúng làm tròn. Tức là có thể gặp đáp số sai.

Ở bài #4 tôi có gợi ý là không so sánh sau khi chia, mà ta hoá đồng mẫu số rồi so sánh mẫu = tử
Nhờ bác giải thích thêm phần bôi đậm được không
 
Góp vui
Mã:
Sub ABC()
  Dim KetQua$, DaySo$, i&, r&, N&
  DaySo = "123456789"
  N = Len(DaySo)
  Randomize
  Do
    If i = N Then i = 1 Else i = i + 1
    r = Int(Rnd() * N + 1)
    tmp = Mid(DaySo, r, 1)
    Mid(DaySo, r, 1) = Mid(DaySo, i, 1)
    Mid(DaySo, i, 1) = tmp
    KetQua = Format(DaySo, "0/00+0/00+0/00")
  Loop Until Evaluate("=" & KetQua) = 1
  Range("A2") = KetQua
End Sub
Bác oi bác, cháu cho kết quả =2 sao nó chạy mãi vậy hở bác?
 
Mình đã nhìn thấy lời giải cho đáp án đúng rồi. Thật là nhiều lời giải, cảm ơn các bạn.
Mình sẽ thông báo tới người thắng sau.
Buổi giao lưu rất thú vị.
Xin góp vui một lời giải đệ quy, thực hiện 9! phép thử.
Mã:
Dim x(10) As Double
Dim p(10) As Boolean
 
Dim i As Integer
 
Function Res() As Double
Dim r As Double
    r = x(1) / (10 * x(2) + x(3))
    r = r + x(4) / (10 * x(5) + x(6))
    r = r + x(7) / (10 * x(8) + x(9))
    Res = r
End Function
 
 
Sub search(i As Integer)
Dim a As Integer
    For a = 1 To 9
        If p(a) = True Then
            x(i) = a
            p(a) = False
            If i < 9 Then
                search (i + 1)
            ElseIf i = 9 Then
                If Res() = 1 Then
                    MsgBox x(1) & x(2) & x(3) & x(4) & x(5) & x(6) & x(7) & x(8) & x(9)
                End If
            End If
            p(a) = True
        End If
    Next
End Sub
 
Sub work()
    For i = 1 To 9
        p(i) = True
    Next
    Call search(1)
End Sub
 
Ông này đặt bài toán mà cần câu trả lời với VBA đơn giản dễ nhận giải dễ sợ.
Duyệt thay đổi vị trí cho tới khi bằng 1.

Tưởng chi là thuật toán nhanh nhất để tìm được.
Rồi kêu người giải thích về thuật toán. Sẽ có bao nhiêu cách như vậy, nếu chỉ có một cách thì giải thích tại sao.

Hoặc là cho từ 0 đến 9 xếp 10 số này vào cái hình kia rồi đếm số cách, và những số sẽ nằm ở kết quả chẳng hạn

--------------------

Ma thuật này thời đại học có nghe thầy giáo nói đến: 492 -357 -816 . cộng ngay, cộng chéo đều = 15
nay bạn @khongtu19bk nhắc đến có giống ma thuật này không nhỉ? vba thì chưa nghỉ ra nhưng con số thô thì 1= 4/92+3/57+8/16 có vẽ giống ma thuật này.
Hy vọng sẽ có lời giải bằng vba để học hỏi
Bài toán này người ta giải bằng phương "pháp đi bộ":
Cách giải này dành cho các ô cột lẻ và hàng lẻ thì đi theo hàng chéo hướng trên bên phải.

Từ một ô vuông đứng Số 1 bắt đầu từ hàng đầu tiên, và cột chính giữa.
Nếu bị mắc kẹt bởi số khác thì đưa xuống dưới nó sang phải 1
Nếu hết khi lên hàng đầu thì từ nó chiếu xuống hàng cuối sang phải 1 ô.
Nếu đến hết cột bên phải thì từ nó chiếu trái về cột đầu tiên lên trên một ô.

Ô vuông chẳn thì có cách giải khác.
 
Lần chỉnh sửa cuối:
đơn giản hay khó thì nó tùy từng người. Với người này là đơn giản, với người khác có thể không đơn giản.
Nói đơn giản nếu là để muốn chứng tỏ mình giỏi thì nó hơi kệch cỡm. Vì đó không phải là cách chứng minh tài năng.
Với lại, tài năng nếu có thì hãy cứ tự mình tận hưởng thôi, không cần khoe cho người khác biết.
 
Mất 3 tháng để dịch cái này.
Thành viên mình muốn gửi lời cảm ơn là @CHAOQUAY .
Tuy nhiên, tài liệu thì mọi người có thể cùng nhau xem, mục đích dịch không gì khác chính là chia sẻ.
Download:
Link 1: http://www.mediafire.com/file/607zzmhyrvlxm21/Sudoku_tuhocvba.xlsm/file
Link 2: https://drive.google.com/file/d/1GSzBrLaatK363b9a3md42M0uq6rGvmwC/view?usp=sharing

Thuật toán được trình bày cặn kẽ, mình không chắc đó là lời giải đẹp, nhưng đó là lời giải dễ hiểu. Mọi người download file về sẽ thấy phần trình bày thuật toán ạ.
 
Mời anh chị em tham gia giải toán bằng VBA.
Thời gian: Ai trả lời sớm nhất, và trước ngày 10/11/2019 sẽ trúng thưởng.
Giải thưởng:
Một cuốn sách VBA.

Yêu cầu dùng VBA để chỉ ra được một đáp án đúng.

Nội dung:
Sách đâu rồi :mad:
Quân tử nhất ngôn tứ mã nan truy !$@!!
Bút sa gà chết :confused:
 
Link 1: http://www.mediafire.com/file/607zzmhyrvlxm21/Sudoku_tuhocvba.xlsm/file
Link 2: https://drive.google.com/file/d/1GSzBrLaatK363b9a3md42M0uq6rGvmwC/view?usp=sharing

Thuật toán được trình bày cặn kẽ, mình không chắc đó là lời giải đẹp, nhưng đó là lời giải dễ hiểu. Mọi người download file về sẽ thấy phần trình bày thuật toán ạ.

Cảm ơn bạn đã chia sẻ.
Tôi đã test nhưng giải thuật này cũng chưa giải được hết các bài sudoku :)
Bài sau thuộc mức "Chuyên gia" thì chương trình chào thua.

Screen Shot 2019-11-23 at 8.16.36 AM.png
 
Cảm ơn bạn đã chia sẻ.
Tôi đã test nhưng giải thuật này cũng chưa giải được hết các bài sudoku :)
Bài sau thuộc mức "Chuyên gia" thì chương trình chào thua.

View attachment 228879
Bạn thử hai bài cuối trong chủ đề này xem. Tôi nghĩ nếu sử dụng thuật toán vét cạn thì không có khái niệm khó dễ. Có đáp án là tìm được.
 
Theo bài #30, đã chốt hạ rồi, tới màn trao 'sách' thôi mừ. :(

1574473170850.png

Sao lại tới phần giải sudoku và tặng thêm tiết mục cố cài cắm quảng cáo mần chi?

Không lẽ 'Giải sudoku' đích thị là 'Một cuốn sách VBA' đó?

1574473328761.png
 
Mời anh chị em tham gia giải toán bằng VBA.
Thời gian: Ai trả lời sớm nhất, và trước ngày 10/11/2019 sẽ trúng thưởng.
Giải thưởng:
Một cuốn sách VBA.

Yêu cầu dùng VBA để chỉ ra được một đáp án đúng.
Nội dung:
Mất 3 tháng để dịch cái này.
Thành viên mình muốn gửi lời cảm ơn là @CHAOQUAY .
Tuy nhiên, tài liệu thì mọi người có thể cùng nhau xem, mục đích dịch không gì khác chính là chia sẻ.
Download:
Link 1: http://www.mediafire.com/file/607zzmhyrvlxm21/Sudoku_tuhocvba.xlsm/file
Link 2: https://drive.google.com/file/d/1GSzBrLaatK363b9a3md42M0uq6rGvmwC/view?usp=sharing
Thuật toán được trình bày cặn kẽ, mình không chắc đó là lời giải đẹp, nhưng đó là lời giải dễ hiểu. Mọi người download file về sẽ thấy phần trình bày thuật toán ạ.
rảnh thì viết code chơi vậy thôi bạn, giải thưởng của bạn nên gửi cho người khác.
 
Sách thưởng bạn nhận rồi tặng lại bạn khác, để mọi người không nghĩ ban tổ chức hứa lèo
Cám ơn bác nhắc nhở.
Báo cáo với các bác thành viên comments thớt này, tôi không có nhận được bất cứ gì riêng tư từ thành viên @khongtu19bk .
Bài trước tôi có trích dẫn bài viết 1 & bài 32 của @khongtu19bk là cũng có ý này.
Tin hay không và đánh giá chủ thớt thế nào là tùy các bác. Bản thân tôi giờ không đọc sách về VBA.

Thân chào!
 
Web KT
Back
Top Bottom