Tìm số (THTA Vòng Chung kết)

View as PDF



Time limit:
Scratch 10.0s

Authors:
Problem type
Points: 100 (p) Time limit: 1.0s Memory limit: 1G Input: stdin Output: stdout

Cho số tự nhiên \(N\). Tìm số tự nhiên \(A\) thoả mãn các điều kiện sau:

  • \(A < N\);
  • \(A\) lớn nhất có thể;
  • Số lượng chữ số của \(A\) bằng số lượng chữ số của \(N\);
  • Tổng các chữ số của \(A\) bằng tổng các chữ số của \(N\).

Input

  • Dữ liệu nhập vào từ bàn phím gồm số tự nhiên \(N (N \le 10^{15})\).

Output

  • In ra màn hình một số \(A\) duy nhất thoả mãn điều kiện đề bài, nếu không tìm được số nào thoả mãn thì in ra \(0\).

Example

Test 1

Input
245
Output
236
Note

Có nhiều số như \(155, 227, 236 ...\) nhỏ hơn \(245\), đều có ba chữ số và có tổng các chữ số bằng \(11\) nhưng \(236\) là số lớn nhất thỏa mãn.

Test 1

Input
9
Output
0
Note

Không có số tự nhiên nào nhỏ hơn \(9\) mà có tổng các chữ số bằng \(9\).


Comments


  • 1
    quan26052013    9:20 a.m. 26 jun, 2024 edited

    sao lại TLE??? Rõ O(N) mà!!!

    #include<bits/stdc++.h>
    #define int long long
    main() {
        try{
            std::vector<int> a;
            int N;
            std::cin >> N;
            for (int i = 1; i < N; ++i) {
                int sum_i = 0;
                int sum_N = 0;
                std::string str_i = std::to_string(i);
                std::string str_N = std::to_string(N);
                for (char c : str_i) {sum_i += c - '0';}
                for (char c : str_N) {sum_N += c - '0';}
                if (sum_i == sum_N && str_i.length() == str_N.length()) {a.push_back(i);}}
            if (!a.empty()) {std::cout << *std::max_element(a.begin(), a.end());}else{std::cout << 0;}
        } catch (std::invalid_argument&) {std::cout << 0;}}
    


    • -1
      Khánh_2008    11:08 a.m. 31 may, 2024

      1 phút


      • -2
        letruong091080    3:45 p.m. 20 jul, 2022

        bài này dễ

        3 replies