• На вход программе поступает натуральное число не превышающее 10^30 Требуется написать программу, которая, используя все цифры этого числа, формирует новое натуральное число, причем самое маленькое из всех возможных той же разрядности. На любом языке (лучше конечно на C++ либо Pascal ABC)

Ответы 1

  • Посчитаем количество раз, когда встречается каждая цифра в исходном числе. Тогда ответ – либо все цифры, расположенные в порядке возрастания (если в исходном числе не было нулей), либо сначала одна наименьшая цифра, потом все нули, потом все остальные цифры в порядке возрастания.

    С++:

    #include <iostream>

    int main() {

       int count[10];

       char digit;

       for (digit = 0; digit < 10; digit++) {

           count[digit] = 0;

       }

       while (std::cin.get(digit)) {

           digit -= '0';

           if ((digit < 0) || (digit > 9)) {

               break;

           }

           count[digit]++;

       }

       digit = 1;

       while (count[digit] == 0) {

           digit++;

       }

       std::cout << int(digit);

       count[digit]--;

       for (digit = 0; digit < 10; digit++) {

           for (int i = 0; i < count[digit]; i++) {

               std::cout << int(digit);

           }

       }

       return 0;

    }

    Пример ввода: 11111111112345678098765422

    Пример вывода: 10111111111222344556677889

  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years