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

Owslalien Owslalien    3   29.09.2019 05:20    0

Ответы
Elka1238 Elka1238  27.08.2020 09:21

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

С++:

#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

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика