Предмет: Информатика, автор: Nic122

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


Аноним: Допустим 5 входное число. Что должна сделать программа?
Nic122: ну допустим число 54321, оно должно вывести 12345

Ответы

Автор ответа: nelle987
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

Похожие вопросы
Предмет: Қазақ тiлi, автор: rozalinaalymzhan
Предмет: Биология, автор: kseniya223413
Предмет: Алгебра, автор: derededada
Предмет: География, автор: СаМаЯуМнАя111