khongtu19bk
Thành viên hoạt động



- Tham gia
- 5/12/09
- Bài viết
- 147
- Được thích
- 69
tức là làm code tìm kết quả hay saoMờ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:
Chụp hình sách gởi lênMờ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:
Anh không biết mấy thành viên kia là ai rồi.Tôi nghĩ ông ilvba này chơi chữ thôi và tôi thiết nghĩ những câu phản hồi đối với một chủ đề như vậy là dư thừa, làm loãng việc theo dõi những bài viết có tính xây dựng.
Const l_I_l = 7, l_I_I_l = 6, l_l_I_I = 5, l_l_I_l = 4, l_I_l_l_I = 3, l_l_l_l_l = True, l_I_I = 2, l_l_I_l_I = 8, l_I_l_l = 511, l_I_I_I_l = 0, l_l_l_l_I = 9, l_l_l = 1, l_I_l_I_l = "_", l_l_l_l = "l", l = "I"
Dim l_l_I_l_l(l_l_l To l_l_l_l_I) As Long, l_I_l_I_I As Boolean
Sub ABC(): Dim l_l_l_l As Long: For l_l_l_l = l_l_l To l_l_l_l_I: l_l_I_l_l(l_l_l_l) = l_l_l_l: Next: l_l_I_I_I l_I_I_I_l, l_I_l_l: l_I_l_I_I = False: End Sub
Private Sub l_l_I_I_I(ByVal l_I_l_l As Long, ByVal l_l_l_l As Long)
If l_I_l_I_I Then Exit Sub
l_I_l_l = l_I_l_l + l_l_l: For l_l_I_I_l = l_I_I_I_l To l_l_I_l_I
If l_I_I ^ l_l_I_I_l And l_l_l_l Then
l_l_I_l_l(l_I_l_l) = l_l_I_I_l + l_l_l
If l_I_l_l < l_l_l_l_I Then
l_l_I_I_I l_I_l_l, l_l_l_l - l_I_I ^ l_l_I_I_l
ElseIf l_l Then
l_I_l_I_I = l_l_l_l_l: l_I_l_l_l: Exit Sub: End If: End If: Next: End Sub
Private Function l_l() As Boolean: l_l = (l_l_I_l_l(l_l_l) / CLng(l_l_I_l_l(l_I_I) & l_l_I_l_l(l_I_l_l_I)) + l_l_I_l_l(l_l_I_l) / CLng(l_l_I_l_l(l_l_I_I) & l_l_I_l_l(l_I_I_l)) + l_l_I_l_l(l_I_l) / CLng(l_l_I_l_l(l_l_I_l_I) & l_l_I_l_l(l_l_l_l_I)) = l_l_l): End Function
Private Sub l_I_l_l_l(): Dim l_l_l_l_l As Long: For l_l_l_l_l = l_l_l To l_l_l_l_I: Cells(l_l_l, l_l_l_l_l) = l_l_I_l_l(l_l_l_l_l): Next: End Sub
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 = 15Mờ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:
Có nhầm lẫn gì không bạn?1= 4/92+3/57+8/16
Tính lại đúng là nhầm! hy vọng anh cho lời giải để em học hỏi. cảm ơn anhCó nhầm lẫn gì không bạn?
Bài #12 đó bạn.Tính lại đúng là nhầm! hy vọng anh cho lời giải để em học hỏi. cảm ơn anh
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:
Sub Test()
Dim Arr0
Dim Result
Dim i, k
Sheet1.UsedRange.Clear
Arr0 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
k = UBound(Arr0)
ReDim Result(k)
PMT ByVal Arr0, ByVal k, ByVal Result, ByVal i, k
End Sub
Sub PMT(ByVal SArr, ByVal cl, ByVal ResN, ByVal rw, DmS)
Dim Arr1
Dim i, j, k
If cl < 0 Then
ReDim j(1 To 3)
For i = 0 To DmS Step 3
k = k + ResN(i) / (ResN(i + 1) * 10 + ResN(i + 2))
j(Int(i / 3) + 1) = ResN(i) & "_" & (ResN(i + 1) * 10 + ResN(i + 2))
Next i
If k = 1 Then Sheet1.Range("A1000000").End(xlUp).Offset(1).Resize(1, 3) = j
Else
For i = 0 To cl
ResN(rw) = SArr(i)
Arr1 = SArr
Arr1(i) = Arr1(cl)
PMT ByVal Arr1, ByVal cl - 1, ByVal ResN, ByVal rw + 1, DmS
Next i
End If
End Sub
Private Function TronDe(s As String) As String
Dim i As Integer, lens As Integer, r As Integer
Dim temp As String
Randomize
lens = Len(s)
For i = 1 To lens
r = Int(Rnd() * lens) + 1
temp = Mid(s, r, 1)
Mid(s, r, 1) = Mid(s, i, 1)
Mid(s, i, 1) = temp
Next i
TronDe = s
End Function
'********************'
Public Sub TimSo()
Dim dapan As String
Dim s As String
Dim i As Long
Const n = "123456789"
For i = 1 To 500000
s = TronDe(n)
dapan = Format(s, "0/00+0/00+0/00")
If Evaluate("=" & dapan) = 1 Then
Range("K1").Value = dapan
Exit Sub
End If
Next i
End Sub
Có sách gửi mình xem nhé.Mình chưa đọc sách bao giờ.Toàn tìm tài liệu trên diễn đàn chưa có sách đọc.Mã:Sub Test() Dim Arr0 Dim Result Dim i, k Sheet1.UsedRange.Clear Arr0 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) k = UBound(Arr0) ReDim Result(k) PMT ByVal Arr0, ByVal k, ByVal Result, ByVal i, k End Sub Sub PMT(ByVal SArr, ByVal cl, ByVal ResN, ByVal rw, DmS) Dim Arr1 Dim i, j, k If cl < 0 Then ReDim j(1 To 3) For i = 0 To DmS Step 3 k = k + ResN(i) / (ResN(i + 1) * 10 + ResN(i + 2)) j(Int(i / 3) + 1) = ResN(i) & "_" & (ResN(i + 1) * 10 + ResN(i + 2)) Next i If k = 1 Then Sheet1.Range("A1000000").End(xlUp).Offset(1).Resize(1, 3) = j Else For i = 0 To cl ResN(rw) = SArr(i) Arr1 = SArr Arr1(i) = Arr1(cl) PMT ByVal Arr1, ByVal cl - 1, ByVal ResN, ByVal rw + 1, DmS Next i End If End Sub
Anh ơi chậm rồi.Chắc không có sách đâu.PHP:Private Function TronDe(s As String) As String Dim i As Integer, lens As Integer, r As Integer Dim temp As String Randomize lens = Len(s) For i = 1 To lens r = Int(Rnd() * lens) + 1 temp = Mid(s, r, 1) Mid(s, r, 1) = Mid(s, i, 1) Mid(s, i, 1) = temp Next i TronDe = s End Function '********************' Public Sub TimSo() Dim dapan As String Dim s As String Dim i As Long Const n = "123456789" For i = 1 To 500000 s = TronDe(n) dapan = Format(s, "0/00+0/00+0/00") If Evaluate("=" & dapan) = 1 Then Range("K1").Value = dapan Exit Sub End If Next i End Sub
Viết cho vui vậy thôi, thưởng phạt gì nữa bạnCó sách gửi mình xem nhé.Mình chưa đọc sách bao giờ.Toàn tìm tài liệu trên diễn đàn chưa có sách đọc.
Anh ơi chậm rồi.Chắc không có sách đâu.
Thế mới bảo cho mình mượn đọc.Viết cho vui vậy thôi, thưởng phạt gì nữa bạn
Sách vở giờ chịu không dám đọc, nằm xem video cho nó nhàn cái thân![]()
Bạn không sợ ban tổ chức tự ái à. Họ chỉ tặng bản dịch thôi (không biết dịch chuẩn bản gốc không), bản gốc không tặng.Chắc không có sách đâu.
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
Nhờ bác giải thích thêm phần bôi đậm được khôngTheo 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ử
Bác oi bác, cháu cho kết quả =2 sao nó chạy mãi vậy hở bác?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
Vì không có kết quả thỏa điều kiệnBác oi bác, cháu cho kết quả =2 sao nó chạy mãi vậy hở bác?
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
Bài toán này người ta giải bằng phương "pháp đi bộ":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
Sách đâu rồiMờ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:
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 ạ.
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.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
Chắc là vậy rồi bạnKhông lẽ 'Giải sudoku' đích thị là 'Một cuốn sách VBA' đó?
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:
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.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 ạ.
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èorả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.
Cám ơn bác nhắc nhở.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
Thấy người ta nói "làm chơi ăn thật", giờ vụ này thành ra "làm chơi ăn đạn".Tưởng màn mẹ chồng trao 10 cây vàng cho con dâu hóa ra chỉ là màn trao sách VBA mà sao mọi người "hưng phấn" vậy?
Mà rõ khổ, con dâu nhận vàng giả thì bây giờ biết than với ai. À quên, người chiến thắng chỉ nhận được sách ảo thì bây giờ lại phải phân bua với mọi người. Sao chiến thắng mà lại phải khổ thế bạn CHAOQUAY ơi.![]()
Thực chất tôi cho đây là trò quảng cáo rẻ tiền thôi bạn.Cá nhân mình thì nghĩ sách điện tử cũng là sách, nếu chủ topic đã bỏ công 3 tháng ra để dịch thì cũng đáng để mọi người cảm ơn mà. Ngoài ra nếu bạn @khongtu19bk muốn quảng cáo diễn đàn mà không vi phạm nội quy GPE (cái này thì mình không rõ) thì cũng không sao.