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
    py47_09  đã bình luận lúc 15, Tháng 6, 2026, 1:14

    Cho tôi code python 3 bình thường đi mà


  • 1
    xcx  đã bình luận lúc 20, Tháng 5, 2026, 12:34

    import java.util.*;

    public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String N = sc.nextLine();

        int sum = 0;
        boolean has0 = false, has5 = false;
        List<Character> digits = new ArrayList<>();
    
        for (char ch : N.toCharArray()) {
            digits.add(ch);
            int digit = ch - '0';
            sum += digit;
            if (ch == '0') has0 = true;
            if (ch == '5') has5 = true;
        }
    
        if (!(has0 || has5) || sum % 9 != 0) {
            System.out.println("-1");
            return;
        }
    
        Collections.sort(digits);
    
        if (digits.get(0) == '0') {
            for (int i = 1; i < digits.size(); i++) {
                if (digits.get(i) != '0') {
                    Collections.swap(digits, 0, i);
                    break;
                }
            }
        }
    
        char lastDigit = digits.get(digits.size() - 1);
        if (lastDigit != '0' && lastDigit != '5') {
            boolean swapped = false;
            for (int i = digits.size() - 2; i >= 0; i--) {
                if (digits.get(i) == '0' || digits.get(i) == '5') {
                    Collections.swap(digits, i, digits.size() - 1);
                    swapped = true;
                    break;
                }
            }
            if (!swapped) {
                System.out.println("-1");
                return;
            }
        }
    
        StringBuilder result = new StringBuilder();
        for (char ch : digits) result.append(ch);
        System.out.println(result.toString());
    }
    

    }


  • 1
    py50_03  đã bình luận lúc 28, Tháng 4, 2026, 13:42

    s=input().strip();d=sorted(s);print(-1 if sum(map(int,s))%9 or not any(c in '05' for c in d) else ''.join(d[:(i:=[i for i in range(len(d)-1,-1,-1) if d[i] in '05'][0])]+d[i+1:]+[d[i]])) code đây các bạn code của python


  • -1
    KVMB343_26  đã bình luận lúc 10, Tháng 4, 2026, 15:41

    code c++ no AI

    #include <bits/stdc++.h>
    using namespace std;
    string N;
    int main() {
        cin >> N;
        vector<char> d(N.begin(), N.end());
        string res = "";   
        for (char l : {'0', '5'}) {
            auto it = find(d.begin(), d.end(), l);
            if (it != d.end()) {
                vector<char> t = d;
                t.erase(find(t.begin(), t.end(), l)); 
                sort(t.begin(), t.end());
                if (!t.empty() && t[0] == '0') {
                    for (int i = 1; i < (int)t.size(); i++) {
                        if (t[i] != '0') {
                            swap(t[0], t[i]);
                            break;
                        }
                    }
                }
    
                string c(t.begin(), t.end());
                c.push_back(l);
    
                if (res.empty() || c < res) {
                    res = c;
                }
            }
        }
    
        if (res.empty()) {
            cout << -1 << "\n";
        } else {
            cout << res << "\n";
        }
        return 0;
    }
    

  • -6
    hoangminh080316  đã bình luận lúc 8, Tháng 4, 2026, 14:52

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


  • 8
    KVMB343_26  đã bình luận lúc 8, Tháng 4, 2026, 12:14

    có ai cần code C++ ko, tôi có nè, nếu CẦN, cho tôi xin 20 vote nhé(pls!!!) TYSM


  • 3
    minhkhoi_py30  đã bình luận lúc 30, Tháng 3, 2026, 12:09

    nếu bình luận này được 20 vote, tôi sẽ cho code AC 100 %(CHẮC LUÔN)


  • 2
    home_khang  đã bình luận lúc 15, Tháng 3, 2026, 4:28

    code cua tht07 la AI chac luon


  • -3
    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)


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

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


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

    mình xin code python với

    đi mà 🙏🙏🙏


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

    mình xin code python với


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

    đừng nhắn linh tinh nhé


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

    mình xin code với


  • -12
    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)


  • -7
    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.