Bội của 45

Xem dạng PDF

Gửi bài giải

Điểm: 20,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, PyPy, Python, Scratch

Tuấn rất thích các số là bội của 45. Vì vậy cứ thấy bất kỳ một số nguyên dương N nào Tuấn cũng cố gắng biến đổi số đó bằng cách thay đổi vị trí các chữ số để được một bội số của 45.

Cho trước số nguyên dương N, hãy cho biết có thể biến đổi N để hợp với sở thích của Tuấn được hay không?

Input:
Một dòng chứa số nguyên N
1 <= N <= 10^1000
Ouput:
Nếu có thể biến đổi được thì in ra số nhỏ nhất thỏa mãn bài toán, ngược lại thì in -1
Ví dụ 1
Input:
153
Output:
135
Ví dụ 2
Input:
55544
Ouput:
-1

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    tht07  đã bình luận lúc 22, Tháng 2, 2026, 13:56

    import sys

    def solve():

    s = sys.stdin.readline().strip()

     digits = [int(d) for d in s]
    
    # 1. Kiểm tra điều kiện chia hết cho 9
    if sum(digits) % 9 != 0:
        print("-1")
        return
    
    res = []
    
    # 2. Thử đưa số 0 hoặc số 5 xuống cuối để chia hết cho 5
    for target in [0, 5]:
        if target in digits:
            temp_digits = digits.copy()
            temp_digits.remove(target) # Lấy một chữ số target ra để đặt ở cuối
            temp_digits.sort()         # Sắp xếp các chữ số còn lại tăng dần
    
            # Ghép lại thành số: các chữ số đã xếp + chữ số target ở cuối
            candidate = temp_digits + [target]
    
            # Xử lý trường hợp số 0 đứng đầu (trừ khi số đó chỉ có 1 chữ số)
            if len(candidate) > 1 and candidate[0] == 0:
                # Tìm chữ số đầu tiên khác 0 để đổi chỗ
                for i in range(len(candidate) - 1): # Không xét chữ số cuối cùng (là target)
                    if candidate[i] > 0:
                        candidate[0], candidate[i] = candidate[i], candidate[0]
                        break
    
            # Nếu sau khi đổi chỗ mà số đầu vẫn là 0 (ví dụ toàn số 0), 
            # hoặc target là 0 mà ta đổi trúng nó thì cần kiểm tra kỹ.
            # Nhưng với logic sort tăng dần, số ghép lại sẽ là nhỏ nhất.
            res.append("".join(map(str, candidate)))
    
    if not res:
        print("-1")
    else:
        # Chuyển sang int để so sánh số nào nhỏ nhất, rồi in ra dạng string
        print(min(res, key=int))
    

    solve()

    code nha các bạn(python3)


  • 4
    quanganhtht26  đã bình luận lúc 25, Tháng 1, 2026, 6:19

    đừng nhắn linh tnh nhé các bạn


  • 0
    py44_10  đã bình luận lúc 18, Tháng 12, 2025, 15:30

    mình xin code python với

    đi mà 🙏🙏🙏


  • 9
    minhkhoi_py30  đã bình luận lúc 6, Tháng 12, 2025, 9:34

    mình xin code python với


  • 8
    minhkhoi_py30  đã bình luận lúc 1, Tháng 12, 2025, 13:38

    đừng nhắn linh tinh nhé


  • 0
    giabaotht26  đã bình luận lúc 17, Tháng 11, 2025, 14:12

    mình xin code với


  • -5
    tieuhatuanminh  đã bình luận lúc 11, Tháng 11, 2025, 11:37

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 3
    phuquy  đã bình luận lúc 7, Tháng 6, 2025, 9:53

    code:

    • import sys

      s = input().strip() if not s: print(-1) sys.exit()

      a = sorted(s) t = sum(int(x) for x in a) if t % 9 != 0 or ('0' not in a and '5' not in a): print(-1) sys.exit()

      r = None for l in ['0','5']: if l in a: b = a.copy() b.remove(l) b.sort() if b and b[0] == '0': for i in range(1,len(b)): if b[i] != '0': b[0],b[i] = b[i],b[0] break else: if l == '0': continue x = ''.join(b) + l if x[0] == '0': continue if r is None or x < r: r = x

      if r: print(r) else: print(-1)


  • -5
    missna  đã bình luận lúc 7, Tháng 5, 2025, 12:13

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.