Mời các bạn luyện tập nhẹ với bài toán ABCDE / FGHIJ = 9

  • Thread starter Thread starter SA_DQ
  • Ngày gửi Ngày gửi
Liên hệ QC

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,576
Được thích
22,897
Nghề nghiệp
U80
Hãy tìm giúp các số mà các chữ cái đang làm đại diện cho nó.
 
Hãy tìm giúp các số mà các chữ cái đang làm đại diện cho nó.

Xin vui lòng cho hỏi, đại diện ký tự đó là số nguyên hay số thực ạ?

Và có phải rằng khi đã là A thì các ký tự khác phải khác A đúng không? Và Len(A) = 1 hay nhiều hơn ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Xin vui lòng cho hỏi, đại diện ký tự đó là số nguyên hay số thực ạ?

Và có phải rằng khi đã là A thì các ký tự khác phải khác A đúng không? Và Len(A) = 1 hay nhiều hơn ạ?

Không những là số nguyên mà còn là 1 trong 10 con số không âm nhỏ nhất mà thôi!

Rất cảm ơn các bạn đã quan tâm!
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tất nhiên là 10 ký số khác nhau đó NDU

To Learning_Excel : Cứ cho rằng có ký số 0 ở đầu số chia thì còn 2 đáp án nữa;
Nếu không kể các trường hợp này thì vẫn có thể tìm ra 3 nghiệm nữa đó các bạn.

Nhưng đừng mò chứ; BOX lập trình mà!

Rất cảm ơn các bạn đã quan tâm.
 
Upvote 0
Những cặp như vầy có thoả đề không bác?
57429|06381
58239|06471
75249|08361
95742|10638
95823|10647
97524|10836
Và sau khi tối ưu 1 chút cho code thì nó thành ra như vầy!
PHP:
Sub chay()
Dim M As String, k As Byte, i As Long, j As Long, x As Byte, d As Byte
k = 1
For i = 11106 To 98765
For j = 1234 To 10974
    If i / j = 9 Then
        '[D1] = i
        M = Format(i, "00000") & Format(j, "00000")
        For x = 2 To 10
            If InStr(x, M, Mid(M, x - 1, 1)) = 0 Then
                d = 1
            Else
                d = 0
                Exit For
            End If
        Next
        If d = 1 Then
            Cells(k, "A") = i
            Cells(k, "B") = j
            k = k + 1
        End If
    End If
Next
Next
End Sub

Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
hic. em đọc mãi mà vẫn chưa hiểu rõ về code này. bác Po_Pikachu giải thích một ít đi. Cho bọn em còn học hỏi và nâng cao thuật toán tý.
cảm ơn bác nhìu nhìu
 
Upvote 0
Rất vui là Po_pikachu đã có đáp án tổng quát quá xuất sắc luôn.

Fát huy chiến quả, ta sang tiếp bài 1.1, như sau
ABCDE & FGHI sẽ cho ta thương số trãi dài lần lượt từ 1 đến 8
Biết rằng 9 chữ cái này đại diện cho các số từ 1 đến 9 (không trùng lắp). Bạn tìm giúp tôi cặp số ấy trong 8 trường hợp có thương khác nhau từ 1 đến 8. (Vì 9 ta làm rồi, khà, khà,. . . !)

Cảm ơn các bạn đã quan tâm!
 
Upvote 0
To Learning_Excel : Cứ cho rằng có ký số 0 ở đầu số chia thì còn 2 đáp án nữa;
Nếu không kể các trường hợp này thì vẫn có thể tìm ra 3 nghiệm nữa đó các bạn.

Nhưng đừng mò chứ; BOX lập trình mà!

Rất cảm ơn các bạn đã quan tâm.
Còn 5 trường hợp nữa tôi chưa ghi ra
Dùng công thúc hay VBA thì cũng là mò cả, nếu muốn không mò thì lập hệ phương trình?
Dùng công thức thì trực quan hơn, nhưng tôi thừa nhận là dùng VBA hay hơn, cảm ơn các bạn.
 
Upvote 0
Những cặp như vầy có thoả đề không bác?
57429|06381
58239|06471
75249|08361
95742|10638
95823|10647
97524|10836
Và sau khi tối ưu 1 chút cho code thì nó thành ra như vầy!
PHP:
Sub chay()
Dim M As String, k As Byte, i As Long, j As Long, x As Byte, d As Byte
k = 1
For i = 11106 To 98765
For j = 1234 To 10974
    If i / j = 9 Then
        '[D1] = i
        M = Format(i, "00000") & Format(j, "00000")
        For x = 2 To 10
            If InStr(x, M, Mid(M, x - 1, 1)) = 0 Then
                d = 1
            Else
                d = 0
                Exit For
            End If
        Next
        If d = 1 Then
            Cells(k, "A") = i
            Cells(k, "B") = j
            k = k + 1
        End If
    End If
Next
Next
End Sub

Thân.
Tôi chạy code này thử nhưng tốc độ chậm quá nên không đủ kiên nhẫn đợi. Xin góp vui 1 đoạn code như sau.
Mã:
Sub test()
    Dim iStart As Long
    Dim iFinish As Long
    Dim iBigNum As Long
    Dim iSmallNum As Long
    Dim iResult As Integer
    Dim bOK As Boolean
    Dim iCheck As Integer
    Dim sTemp As String
    iStart = 1234 * 9
    iFinish = WorksheetFunction.Floor(98765, 9)
    For iBigNum = iStart To iFinish Step 9
        iSmallNum = iBigNum \ 9
        sTemp = Format(iBigNum, "00000") & Format(iSmallNum, "00000")
        bOK = True
        For iCheck = 2 To 10
            If InStr(iCheck, sTemp, Mid(sTemp, iCheck - 1, 1)) > 0 Then
                bOK = False
                Exit For
            End If
        Next
        If bOK Then
            iResult = iResult + 1
            Cells(iResult, 1) = iBigNum
            Cells(iResult, 2) = iSmallNum
        End If
    Next
End Sub
 
Upvote 0
Fát huy chiến quả, ta sang tiếp bài 1.1, như sau
ABCDE & FGHI sẽ cho ta thương số trãi dài lần lượt từ 1 đến 8
Biết rằng 9 chữ cái này đại diện cho các số từ 1 đến 9 (không trùng lắp). Bạn tìm giúp tôi cặp số ấy trong 8 trường hợp có thương khác nhau từ 1 đến 8. (Vì 9 ta làm rồi, khà, khà,. . . !)

Cảm ơn các bạn đã quan tâm!

Số không trùng nhau thì làm gì có 1 hả bác? Thôi em viết vậy cho tổng quát ha. Bác muốn thêm số nào thì cứ viết thêm vào trong biến dl là được.

PHP:
Sub thuonglt()
Dim i As Long, j As Long, x As Long, d As Byte, dl As String, M As String, iCol As Long
dl = "1-2-3-4-5-6-7-8"
Range("A1", Cells(65000, UBound(Split(dl, "-")) + 1)).ClearContents
For i = 0 To UBound(Split(dl, "-"))
    Cells(1, i + 1) = Split(dl, "-")(i)
Next
For i = 1234 To 98765
    Application.StatusBar = i & "      " & WorksheetFunction.Round(((i - 1234) / 97531) * 100, 2) & "%"
    For j = 0 To UBound(Split(kiem(i, dl), "-"))
        If kiem(i, dl) = "" Then Exit For
        iCol = Val(Split(kiem(i, dl), "-")(j))
        M = Format(i, "00000") & Format(i / iCol, "00000")
        For x = 2 To 10
            If InStr(x, M, Mid(M, x - 1, 1)) = 0 Then
                d = 1
            Else
                d = 0
                Exit For
            End If
        Next
        If d = 1 Then
            Cells(65000, WorksheetFunction.Match(iCol, Range("A1", Cells(1, UBound(Split(dl, "-")) + 1)), 0)).End(xlUp).Offset(1) = i & "-" & i / iCol
            Cells(65000, WorksheetFunction.Match(iCol, Range("A1", Cells(1, UBound(Split(dl, "-")) + 1)), 0)).End(xlUp).Select
        End If
    Next
Next
[A2].Select
End Sub
PHP:
Function kiem(so As Long, dl As String)
Dim temp As String
For i = 1 To UBound(Split(dl, "-"))
    If so Mod Val(Split(dl, "-")(i)) = 0 Then
        temp = temp & Split(dl, "-")(i) & " "
    End If
Next
kiem = Replace(Trim(temp), " ", "-")
End Function
Thân.
 

File đính kèm

Upvote 0
Mình thử cải biến Code của Picatchu

Thấy thời gian rút đáng kể; Đó là nhờ các dòng lệnh được đánh số thêm vào:

Mã:
Option Explicit
[B]Sub chay01()[/B]
Dim M As String, jJ As Byte, Ww As Long, Zz As Long, Ff As Byte, JF As Byte
Dim Timer_ As Double

 jJ = 1:                                  Timer_ = Timer
 For Ww = 11106 To 98765
1   If Ww \ 9 = Ww / 9 Then
      For Zz = 1234 To 10974
2         If Zz \ 9 = Zz / 9 Then
         If Ww / Zz = 9 Then
            [D1] = Ww
            M = Format(Ww, "00000") & Format(Zz, "00000")
            For Ff = 2 To 10
               If InStr(Ff, M, Mid(M, Ff - 1, 1)) = 0 Then
                  JF = 1
               Else
                  JF = 0:                       Exit For
               End If
            Next
            If JF = 1 Then
               Cells(jJ, "A") = Ww:             Cells(jJ, "B") = Zz
               jJ = jJ + 1
            End If
         End If
21         End If
      Next
11   End If
 Next
 Cells(65500, "D").End(xlUp).Offset(1).Value = Timer - Timer_
[B]End Sub[/B]

Thời gian theo máy của mình rút từ 77.891 gy còn 9.359 gy Nhờ vào tính chia hết của tử số cũng như mẫu số
 
Upvote 0
Web KT

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

Back
Top Bottom