Tìm số tự nhiên bé nhất có tổng các chữ số bằng 39

Liên hệ QC

Cá ngừ F1

( ͡° ͜ʖ ͡°)
Thành viên BQT
Moderator
Tham gia
1/1/08
Bài viết
2,579
Được thích
3,715
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Quan hệ.. và quan hệ..
Gửi các anh/chị,
Hôm qua, em có gặp bài toán này của cháu bé lớp 4 như tên tiêu đề.
Quả thật là cũng chưa nghĩ ra thuật toán như: số này sẽ bắt đầu bằng số nào? số này sẽ phải có bao nhiêu chữ số? để đảm bảo yêu cầu đề bài.
Như bài này em làm mò như sau: 39 = 9*4 + 3, vậy sẽ bắt đầu bằng số 3, kết quả 39999, cũng chưa biết có đúng cho bài toán khác không?
Em đăng lên đây, mong các thành viên hỗ trợ xây dựng thuật toán và hàm tự tạo để giải bài toán này.
Em cảm ơn.
 
Gửi các anh/chị,
Hôm qua, em có gặp bài toán này của cháu bé lớp 4 như tên tiêu đề.
Quả thật là cũng chưa nghĩ ra thuật toán như: số này sẽ bắt đầu bằng số nào? số này sẽ phải có bao nhiêu chữ số? để đảm bảo yêu cầu đề bài.
Như bài này em làm mò như sau: 39 = 9*4 + 3, vậy sẽ bắt đầu bằng số 3, kết quả 39999, cũng chưa biết có đúng cho bài toán khác không?
Em đăng lên đây, mong các thành viên hỗ trợ xây dựng thuật toán và hàm tự tạo để giải bài toán này.
Em cảm ơn.
Theo em thấy số tự nhiên bé nhất thì phải là số có số chữ số ít nhất, số tự nhiên có số chữ số ít nhất mà tổng bằng 1 số thì các chữ số phải là lớn nhất. Vậy giả sử n là số tổng, thì lấy n/9 được số nguyên (k) và dư m thì khi đó số tự nhiên bé nhất có tổng bằng n là:
m9{k} (tức m đứng trước và kèm theo sau số 9 lặp k lần)
 
Gửi các anh/chị,
Hôm qua, em có gặp bài toán này của cháu bé lớp 4 như tên tiêu đề.
Quả thật là cũng chưa nghĩ ra thuật toán như: số này sẽ bắt đầu bằng số nào? số này sẽ phải có bao nhiêu chữ số? để đảm bảo yêu cầu đề bài.
Như bài này em làm mò như sau: 39 = 9*4 + 3, vậy sẽ bắt đầu bằng số 3, kết quả 39999, cũng chưa biết có đúng cho bài toán khác không?
Em đăng lên đây, mong các thành viên hỗ trợ xây dựng thuật toán và hàm tự tạo để giải bài toán này.
Em cảm ơn.
Tôi nghĩ hướng giải quyết này là đúng, thử công thức sau:

=(MOD(A1,9)&REPT(9,INT(A1/9)))+0

.
 
Gửi các anh/chị,
Hôm qua, em có gặp bài toán này của cháu bé lớp 4 như tên tiêu đề.
Quả thật là cũng chưa nghĩ ra thuật toán như: số này sẽ bắt đầu bằng số nào? số này sẽ phải có bao nhiêu chữ số? để đảm bảo yêu cầu đề bài.
Như bài này em làm mò như sau: 39 = 9*4 + 3, vậy sẽ bắt đầu bằng số 3, kết quả 39999, cũng chưa biết có đúng cho bài toán khác không?
Em đăng lên đây, mong các thành viên hỗ trợ xây dựng thuật toán và hàm tự tạo để giải bài toán này.
Em cảm ơn.
Theo tôi, nghĩ như vậy là đúng rồi.
 
Không biết viết như vầy có đúng không?
Rich (BB code):
Function SmallX(Num As Long)
    Dim N1&, N2, i&
    If Num < 0 Then MsgBox "So khong duoc nho hon khong!": Exit Function
    If Num > 135 Then MsgBox "So phai nho hon 136!": Exit Function
    N1 = Num Mod 9
    If N1 = 0 Then N1 = 9
    N1 = Num / 9
    N2 = Num Mod 9
    For i = 1 To N1
        N2 = N2 & 9
    Next
    SmallX = N2
End Function
 
Gửi các anh/chị,
Hôm qua, em có gặp bài toán này của cháu bé lớp 4 như tên tiêu đề.
Quả thật là cũng chưa nghĩ ra thuật toán như: số này sẽ bắt đầu bằng số nào? số này sẽ phải có bao nhiêu chữ số? để đảm bảo yêu cầu đề bài.
Như bài này em làm mò như sau: 39 = 9*4 + 3, vậy sẽ bắt đầu bằng số 3, kết quả 39999, cũng chưa biết có đúng cho bài toán khác không?
Em đăng lên đây, mong các thành viên hỗ trợ xây dựng thuật toán và hàm tự tạo để giải bài toán này.
Em cảm ơn.
Dùng thử solver cho đỡ mệt óc :D

---
Tải lại file sửa công thức
 

File đính kèm

  • timso.xlsx
    9.2 KB · Đọc: 10
Lần chỉnh sửa cuối:
Công thức Excel 365: đặt name là xxx, refer to = lambda(x,if(x<10,x,xxx(x-9) & 9))
 
Dùng thử solver cho đỡ mệt óc :D
Cảm ơn anh, Solver không thấy mệt, nhưng em cũng chưa biết chút nào về cái Solver này luôn.
Mà với tổng bằng 134 thì Solver đang sai?

TB: một bài toán tìm số bé nhất, mà sao cho các cháu số to thế không biết?

Snag_57bdc689.png
 
Cảm ơn anh, Solver không thấy mệt, nhưng em cũng chưa biết chút nào về cái Solver này luôn.
Mà với tổng bằng 134 thì Solver đang sai?

TB: một bài toán tìm số bé nhất, mà sao cho các cháu số to thế không biết?

View attachment 267219
Công thức bị nhân thừa 1 lần 10, bạn tải lại file bài trên test lại xem sao.

Nếu số quá lớn, có thể chèn thêm dòng vào giữa vùng điều kiện & copy công thức vào các ô mới chèn trước khi chạy.
 
Tôi không biết lớp 4 giải thế nào, nhưng khi nào họp phụ huynh tôi sẽ hỏi cô giáo. Lớp 4 học lâu rồi nên không nhớ.

Nếu là tôi thì tôi sẽ giải như sau.

Nếu tổng a < 10 thì kết quả là số có 1 chữ số đúng bằng a.
Nếu a > 9 thì kết quả có ít nhất là 2 chữ số. Kết quả phải có chữ số đơn vị là 9. Thật thế giả sử kết quả = <a1...an>b với b < 9.
an không thể = 0 bởi nếu thế ta loại số an và được kết quả = <a1...a(n-1)>b nhỏ hơn do có số chữ số nhỏ hơn mà tổng các chữ số vẫn bằng a. Vậy kết quả = <a1...(an-1)>(b+1) < <a1...an>b, trái với giả thiết <a1...an>b là số nhỏ nhất có tổng các chữ số bằng a.

Vậy số <a1...an> có tổng các chữ số = a-9. Tương tự như trên số nhỏ nhất khi an = 9.

Tóm lại số nhỏ nhất có tổng các chữ số bằng a là số có tất cả các chữ số, ngoại trừ chữ số đầu tiên, đều bằng 9.

Tổng các chữ số = 39 thì số nhỏ nhất có 4 chữ số cuối là 9 và chữ số đầu bằng 3, tức 39999
 
Không biết viết như vầy có đúng không?
Rich (BB code):
Function SmallX(Num As Long)
    Dim N1&, N2, i&
    If Num < 0 Then MsgBox "So khong duoc nho hon khong!": Exit Function
    If Num > 135 Then MsgBox "So phai nho hon 136!": Exit Function
    N1 = Num Mod 9
    If N1 = 0 Then N1 = 9
    N1 = Num / 9
    N2 = Num Mod 9
    For i = 1 To N1
        N2 = N2 & 9
    Next
    SmallX = N2
End Function
Thuật toán này luộm thuộm lắm.
VBA vốn thuộc dòng ngôn ngữ có nhiều hàm làm việc với string. Dùng hàm String code rất gọn.
(dạng hàm sẽ gần như in hệt với công thức bài #3)

Function SoGiDo(ByVal ts As Long) As Long
SoGiDo = (ts Mod 9) & String(ts \ 9, "9")
End Function

1633438254628.png
 
Thuật toán này luộm thuộm lắm.
VBA vốn thuộc dòng ngôn ngữ có nhiều hàm làm việc với string. Dùng hàm String code rất gọn.
(dạng hàm sẽ gần như in hệt với công thức bài #3)

Function SoGiDo(ByVal ts As Long) As Long
SoGiDo = (ts Mod 9) & String(ts \ 9, "9")
End Function

View attachment 267235
Hàm này của anh rất ngắn và nhanh, tuy nhiên đến 83 là lỗi luôn anh ạ

Snag_3a0eda.png
 
Hàm này của anh rất ngắn và nhanh, tuy nhiên đến 83 là lỗi luôn anh ạ
...
Bạn cũng thừa biết trên 2 tỷ là quá giới hạn của Long
Sửa lại cho hàm trả về Double thì sẽ vượt qua được ngưỡng này. Tuy nhiên cũng còn cửa 15 chữ số.
Chỉ có để hàm mặc định trả về Variant->String mới dài được.
 
Không biết viết như vầy có đúng không?
Rich (BB code):
Function SmallX(Num As Long)
    Dim N1&, N2, i&
    If Num < 0 Then MsgBox "So khong duoc nho hon khong!": Exit Function
    If Num > 135 Then MsgBox "So phai nho hon 136!": Exit Function
    N1 = Num Mod 9
    If N1 = 0 Then N1 = 9
    N1 = Num / 9
    N2 = Num Mod 9
    For i = 1 To N1
        N2 = N2 & 9
    Next
    SmallX = N2
End Function
Hàm này của anh @Maika8008 nếu tổng các chữ số bằng 5 đến 9 đang không chính xác.
Nếu tổng dạng x5 đến x9 đang sai.

Snag_5f5f48.png
 
Hàm Lambda dùng trong bài trên là hàm đệ quy, nếu viết bằng VBA sẽ là:
PHP:
Function Sogithe(Total As Long)
If Total < 10 Then
    Sogithe = Total
Else
    Sogithe = Sogithe(Total - 9) * 10 + 9
End If
End Function
 
Nếu là VBA thì
Mã:
Function Sogithe(Total As Long) As Long
    If Total < 10 Then
        Sogithe = Total
    Else
        Sogithe = (Total Mod 9) & String(Total \ 9, "9")
    End If
End Function

hoặc

Function Sogithe(Total As Long) As String
    If Total < 10 Then
        Sogithe = Total
    Else
        Sogithe = (Total Mod 9) & String(Total \ 9, "9")
    End If
End Function
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom