


Chắc chắn rằng tổng đài MobiFone sẽ giúp được bácgiúp dùm em hàm tìm số gần đúng
vd
905123456
905122456
904123455
905113456
tìm các số gần đúng chỉ sai khác nhau 2 số trong dãy số, thanks a/c !
la sao chị, em đang rất cần, a/c giúp dùm em vớiChắc chắn rằng tổng đài MobiFone sẽ giúp được bác




giúp dùm em hàm tìm số gần đúng
vd
905123456
905122456
904123455
905113456
tìm các số gần đúng chỉ sai khác nhau 2 số trong dãy số, thanks a/c !




Đã xem qua file của bạn và thấy khó nhai quá. Cố gắng chút thì cũng viêt code được nhưng chắc là hơi đuối. Hỏng biết có cao thủ nào chịu nổi bài toán này không.đã up file vd, nhờ a/c xem giúp em với

Không cần đợi tổng đài đâu bạn ạ. Theo mình thì ổ khóa nào cũng có chìa khóa. Cái chìa khóa đó những anh em trên diễn đàn đang giữ đấy.Chắc chắn rằng tổng đài MobiFone sẽ giúp được bác
Bạn cho dữ liệu vào chạy thử xem.đã up file vd, nhờ a/c xem giúp em với
Đã xem qua file của bạn và thấy khó nhai quá. Cố gắng chút thì cũng viêt code được nhưng chắc là hơi đuối. Hỏng biết có cao thủ nào chịu nổi bài toán này không.
PS: Bên trong file kết quả tạm của bạn không giống như yêu cầu bên ngoài. Kiểm tra lại đi nhé.
Thật ra bài toán này có cách giải nếu bạn cung cấp file đủ thông tin. Có vài dòng thì chả ăn thua gì cả.
- Trong chuổi 9 số khác nhau 2 số (hoặc nhiều hơn có thể sữa hàm)Điều đầu tiên mà tác giả cần làm là:
- Phải đưa ra được 1 tiêu chí chung về SỐ GẦN GIỐNG
- Khác bao nhiêu số (ở cùng vị trí) thì gọi là gần giống
vân vân...
Nói chung là không thể đoán mò được ---> Chả khác nào nhìn tên đoán giới tính
- Trong chuổi 9 số khác nhau 2 số (hoặc nhiều hơn có thể sữa hàm)
- Khác nhau ở bất kì vị trí nào
nhờ a/c giúp em, thanks !
em xem wa nhưng em bấm chữ Run trong file thấy nó ko chạy, em ko biết sử dụng, xin lỗi anh, em muốn sử dụng hàm, thanks a !Tôi đã đưa ra một giải pháp ở bài #8 vậy mà bạn chẳng thèm xem qua. Không biết bạn có thật sự cần câu trả lời không.
Tôi nghĩ tất cả các bài trả lời cho topic của bạn có thể không phải là đáp án nhưng ít nhất bạn cũng phải đọc qua một lần xem người ta nói cái gì chứ.
Ok, hàm thì tôi bó tay rồi.em xem wa nhưng em bấm chữ Run trong file thấy nó ko chạy, em ko biết sử dụng, xin lỗi anh, em muốn sử dụng hàm, thanks a !




Điều đầu tiên mà tác giả cần làm là:
- Phải đưa ra được 1 tiêu chí chung về SỐ GẦN GIỐNG
- Khác bao nhiêu số (ở cùng vị trí) thì gọi là gần giống
vân vân...
Nói chung là không thể đoán mò được ---> Chả khác nào nhìn tên đoán giới tính
Sub so_gan_giong()
Dim i, ii, j, k, kk, x, kq(), dl()
Dim d As Object
Set d = CreateObject("scripting.dictionary")
dl = Range([A2], [A65536].End(3)).Value
ReDim kq(1 To UBound(dl), 1 To 2)
For i = 1 To UBound(dl)
For ii = 1 To UBound(dl)
k = 0
For j = 1 To 9
If Mid(dl(i, 1), j, 1) = Mid(dl(ii, 1), j, 1) Then k = k + 1
Next
If k >= 6 Then
If Not d.exists(dl(ii, 1)) Then
x = x + 1
d.Add dl(ii, 1), ""
kq(x, 1) = dl(ii, 1): kq(x, 2) = ChrW(65 + kk)
End If
End If
Next
kk = kk + 1
Next
[D2].Resize(x, 2) = kq
End Sub
Em có viết code này, nhưng không biết làm sao cho nó thành nhóm A, B, C, D,E.... theo thứ tự
To lala_qnPHP:Sub so_gan_giong() Dim i, ii, j, k, kk, x, kq(), dl() Dim d As Object Set d = CreateObject("scripting.dictionary") dl = Range([A2], [A65536].End(3)).Value ReDim kq(1 To UBound(dl), 1 To 2) For i = 1 To UBound(dl) For ii = 1 To UBound(dl) k = 0 For j = 1 To 9 If Mid(dl(i, 1), j, 1) = Mid(dl(ii, 1), j, 1) Then k = k + 1 Next If k >= 6 Then If Not d.exists(dl(ii, 1)) Then x = x + 1 d.Add dl(ii, 1), "" kq(x, 1) = dl(ii, 1): kq(x, 2) = ChrW(65 + kk) End If End If Next kk = kk + 1 Next [D2].Resize(x, 2) = kq End Sub
Khi nào muốn xài code thì thử code này nhé
Function DiffElements(ByVal Str1 As String, ByVal Str2 As String) As Long
Dim i As Long, n As Long
If Len(Str1) = Len(Str2) Then
For i = 1 To Len(Str1)
If Mid(Str1, i, 1) <> Mid(Str2, i, 1) Then n = n + 1
Next
Else
n = IIf(Len(Str1) > Len(Str2), Len(Str1), Len(Str2))
End If
DiffElements = n
End Function
Function ClassElements(ByVal rng As Range, ByVal lDiff As Long)
Dim i As Long, j As Long, lChk As Long, n As Long
Dim aTmp, Arr()
'rng là 1 vùng có 1 Column và nhieu Rows
On Error Resume Next
aTmp = rng.Value
ReDim Arr(1 To UBound(aTmp), 1 To 1)
For i = 1 To UBound(aTmp) - 1
If Len(aTmp(i, 1)) Then
For j = i + 1 To UBound(aTmp)
If Len(aTmp(j, 1)) Then
lChk = DiffElements(aTmp(i, 1), aTmp(j, 1))
If lChk <= lDiff Then
If Len(Arr(i, 1)) = 0 Then
n = n + 1
Arr(i, 1) = n
End If
Arr(j, 1) = Arr(i, 1)
End If
End If
Next
End If
Next
ClassElements = Arr
End Function
Sub Main()
Dim Arr
With Range("A2:A1000")
Arr = ClassElements(.Cells, 2)
.Offset(, 1).Value = Arr
End With
End Sub




Hic, hình như là code cũng đi hoang rồi anh ơi... sao lạ quá.Thí nghiệm code này xem
Test thử nhé, cũng không chắc chính xác chưa nữa (già rồi, đầu óc tối thui)
Ẹc... Ẹc...




Bài này không dễ xơi đâu. Cả code của tôi và của bạn đều chưa đúng. Bạn thử chạy code của bạn với 4 dòng dữ liệu sau:
904123455
174123768
174123498
174123455
Nếu code chạy đúng thì phải cùng một nhóm mới đúng.
Tuy nhiên do chủ topic không xài macro nên tôi không bàn tiếp.
Hic, hình như là code cũng đi hoang rồi anh ơi... sao lạ quá.
Anh thử test với 4 dòng dữ liệu em giả lập xem.Đi hoang là đi thế nào? Hải thử nói xem
Code của tôi so sánh 2 String, nếu có từ 2 số (trở xuống) cùng vị trí nhưng khác nhau thì mới xem là gần giống
ClassElements(rng, lDiff) ---> Cái biến lDiff này ta tùy chỉnh (sub Main của tôi đang cho nó =2, tức có <=2 số cùng vị trí nhưng khác nhau)
Anh thử test với 4 dòng dữ liệu em giả lập xem.




Đi hoang là đi thế nào? Hải thử nói xem
Code của tôi so sánh 2 String, nếu có từ 2 số (trở xuống) cùng vị trí nhưng khác nhau thì mới xem là gần giống
ClassElements(rng, lDiff) ---> Cái biến lDiff này ta tùy chỉnh (sub Main của tôi đang cho nó =2, tức có <=2 số cùng vị trí nhưng khác nhau)
Test rồi ---> Kết quả 3 số dưới cùng 1 nhóm, còn số trên cùng có ăn nhậu gì với 3 số dưới đâu mà cho vào 1 nhóm?
Có chứ anh, dãy số đầu và dãy số cuối chỉ khác nhau 2 chữ số đầu tiên.
Em nói cặp dãy số 1 và dãy số 4 chức không phải cặp 1 - 2.Tôi vẫn không thấy giữa 2 số:
904123455
174123768
Có điểm gì giống nhau để có thể cho vào 1 nhóm cả
Số có chiểu 9 chữ số, chỉ giống nhau 4 chữ số, còn 5 chữ số khác nhau chả lẽ cũng cho là GIỐNG à?
904123455
174123768
174123498
174123455
Em nói cặp dãy số 1 và dãy số 4 chức không phải cặp 1 - 2.
Vì 3 số dưới giống nhau nên chúng cùng 1 nhóm
Trong khi số đầu lại giống số thứ tư nhưng không giống 2 số còn lại. Nếu vì vậy mà cho chúng vào chung 1 nhóm thì.. kỳ cục quá (hóa ra 4 số giống nhau à?)
Ví dụ:
- a giống b
- b giống c
- c giống d
Vậy nếu cho a, b, c và d vào cùng 1 nhóm thì e rằng không đúng (trong trường hợp a và d khác nhau 1 trời 1 vực)




giúp dùm em hàm tìm số gần đúng
vd
905123456
905122456
904123455
905113456
tìm các số gần đúng chỉ sai khác nhau 2 số trong dãy số, thanks a/c !
ý của anh đúng rùi, nó sẽ gặp trường hợp trùng nhiều nhóm, như vậy theo em nó trùng nhóm nào thì xuất hiện nhóm đó luôn ko cần fai ưu tiên anh, anh viết dùm em hàm nhé, thanks a !




Ý của anh siwtom cũng là viết code. Chắc bạn tưởng là công thức hả? Nếu vẫn còn nghĩ đến công thức thì hãy quên đi. Sẽ không bao giờ có công thức cho bài toán của bạn đâu. Các đại cao thủ viết code còn lắc đầu thì công thức nào chịu nổi.ý của anh đúng rùi, nó sẽ gặp trường hợp trùng nhiều nhóm, như vậy theo em nó trùng nhóm nào thì xuất hiện nhóm đó luôn ko cần fai ưu tiên anh, anh viết dùm em hàm nhé, thanks a !
a/c viết dùm em với ạ, thanks !Ý của anh siwtom cũng là viết code. Chắc bạn tưởng là công thức hả? Nếu vẫn còn nghĩ đến công thức thì hãy quên đi. Sẽ không bao giờ có công thức cho bài toán của bạn đâu. Các đại cao thủ viết code còn lắc đầu thì công thức nào chịu nổi.




Bạn gởi 1 file có dữ liệu thật lên mọi người sẽ cho câu trả lời tốt nhất cho bạna/c viết dùm em với ạ, thanks !




Nhìn tới nhìn lui thì chả biết đường nào mà lầne gởi 1 file vd a nhé, thanks a !
hic ae có cách nào giúp em với
khi xét nếu nó thuộc nhóm A thì kí hiệu nhóm A, nếu xét tiếp nó thuộc nhóm B thì kí hiệu thêm nhóm B,....... cứ như vậy khi nhìn vào ta thấy đc nó thuộc trong những nhóm nào như vậy sẽ dễ chọn cho khách hàng ko anh
Nói chuyện về xếp nhóm thì phải có quy định đại số.
Định nghĩa một nhóm trong Đại Số là tập hợp một số phần tử có cùng một số đặc tính nào đó.
Đặc tính ở đây là gì? Chỉ khác nhau hai ký tự tức là sao?
1. Tức là mọi phần tử trong nhóm chỉ được phép khác từng phần tử khác trong nhóm tối đa 2 ký tự?
2. Hay là ta có 1 phần tử mốc mà mọi phần tử khác trong nhóm chỉ được phép khác phần tử này tối đa 2 ký tự? (dĩ nhiên phần tử mốc này cũng thuộc về nhóm vì nó đạt điều kiện)
@siwtom:
Hình như yêu cầu của đề bài là 2 ký tự "hoặc nhiều hơn nếu cần".
Vì vậy ta nên đặt hàm thêm một tham có mặc định
Function ApproxNumbers(Arr, Optional mxCount=2)
Bên trong hàm:
If badCount > mxCount Then
Bạn có để ý là cho tới tận giờ, khi vài ngày đã trôi qua và chủ đề có vài chục bài mà chủ topic vẫn chưa đưa ra đầy đủ và chính xác: khái niệm "giống nhau", cách xét các dòng dữ liệu?
Chính vì thế khi đưa code tôi nói rất rõ tôi đã giả thiết như thế nào: cách xét các nhóm, lấy gì vào làm phần tử đầu của nhóm (vì làm sao có thể xét dòng nào đó có thuộc nhóm hay không khi nó rỗng), và sau khi có phần tử rồi thì lần lượt xét những dòng nào, "đi" từ đâu tới đâu v...v




Tức là vầy anh ơi: Nhìn và cảm thấy... giống giống chứ ai biết được là nó giống thế nào
Em nói từ đầu rồi: Cũng giống như nhìn cái TÊN và cảm thấy nó là TÊN CON GÁI (chứ nào có ai cấm cái tên đó không được đặt cho con trai)
Ẹc... Ẹc...