** вход программе поступает натуральное число не превышающее 10^30 Требуется написать...

0 голосов
48 просмотров

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


Информатика (277 баллов) | 48 просмотров
0

Допустим 5 входное число. Что должна сделать программа?

0

ну допустим число 54321, оно должно вывести 12345

Дан 1 ответ
0 голосов
Правильный ответ

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

С++:

#include


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);</p>

   count[digit]--;

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

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

           std::cout << int(digit);</p>

       }

   }

   return 0;

}


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

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

(148k баллов)