Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Найти наибольшее и наименьшее трехзначное число из |
Автор: pikiviki 15.3.2014, 23:13 |
Здравствуйте. Программа сначала должна вывести наименьшее трехзначное число а потом наибольшее трехзначное число. Из последовательности чисел входного потока. ![]() Хотел все это дело решить с помощью сортировок. Но сортировка отсортирует мне допустим 130 как 310(но это же не наименьшее число)... Так, что сортировка не поможет. Прочекал разные алгоритмы ничего подходящего не нашел. Может, что есть в STL если запулить все данные в вектор допустим? Помогите чем сможете. |
Автор: Фантом 16.3.2014, 00:27 |
Сортировка вполне годится, только надо ее применять чуть менее топорно. Если отсортировать все цифры по убыванию, то получится наибольшее возможное число. Если отсортировать все цифры по возрастанию, то получится наименьшее возможное число, однако тут нужно обработать одно исключение из правила - если первой цифрой (или цифрами) окажется "0", его нужно поменять местами с первой ненулевой. Ну а STL для сортировки трех цифр... это как убивать воробья даже не из пушки, а сразу атомной бомбой. ![]() |
Автор: Lukkoye 16.3.2014, 00:31 |
Судя по текстовому описанию: 1. Что бы получить наименьшее - нужно отсортировать от меньшего к большему. 2. Что бы получить наибольшее - нужно отсортировать от большего к меньшему. Полученное в итоге число следует дополнить нулями до трех-значного. Если нужно добавить 2 нуля - добавляем их в конце. Если нужно добавить 1 ноль - добавляем его в середину. |
Автор: pikiviki 16.3.2014, 11:22 | ||
Фантом я решил жахнуть с ядерной бомбы)) Потому, что писать функцию для сортировки или саму сортировку мне лень. Вот, что у меня получилось может кому будет интересно. Если кто знает как улучшить буду только рад. Только не судите строго за мой ###кодинг.
|
Автор: volatile 17.3.2014, 09:13 |
Если входной поток будет из миллиона цифр, то и вектор ваш будет содержать миллион элементов. Не слишком ли много, для того чтобы выбрать всего 3 макс. и 3 мин. числа? |
Автор: OpenGL 19.3.2014, 07:06 |
Не пользоваться сортировкой вообще. Читать входной поток и считать, сколько раз какая цифра встретилась. Затем для максимального числа выводим <все девятки><все восьмерки>....<все единицы><все нули> Минимальное получается чуть сложнее. Сначала выведем наименьшее число, имеющееся у нас и не являющееся нулем. Затем <все нули><все единицы>...<все восьмерки><все девятки>. |
Автор: volatile 19.3.2014, 13:10 |
Там вектор равен потоку сколько в потоке будет, такой и вектор будет 100 млрд, значит и вектор будет 100млрд для такой задачи, это крайне не эффективное решение ни по времени, ни по памяти. |
Автор: vinter 19.3.2014, 20:12 |
посмотри задачу, не будет тут никаких миллионов. |
Автор: volatile 20.3.2014, 09:41 | ||
я хотел сказаьть что потоковые функции так не пишут. а вы уперлись в конкретный пример с тремя числами. короче ладно... не поняли меня. пихайте потоки в векторы и сортируйте. ![]() |
Автор: baldina 20.3.2014, 10:13 | ||
volatile, это вы не поняли
здесь 3 и только 3 push_back(). откуда миллион? |
Автор: volatile 20.3.2014, 11:51 |
это вообще не потоковая функция. это ручной ввод для тестированя |
Автор: baldina 20.3.2014, 12:16 |
ну про "потоковые функции" это вообще ваша маленькая выдумка. ясно же что требование заключалось в использовании istream а не fscanf, только и всего Добавлено через 1 минуту и 30 секунд см. также таблицу в первом посте |
Автор: volatile 20.3.2014, 13:47 |
baldina, я просто хотел сказать, что программист должен писать эффективно когда в условиях написано про потоковую функцию, то это значит что программа должна обрабатывать поток prog << some.txt поток подразумеват под собой размер неизвестного размера он может быть и 3, как в данном конкретном примере, а может быть и сколько угодно большим запихивать весь поток в вектор, и потом его сортировать, чтоб найти всего три числа это совершенно неэффективная операция. мягко говоря. вы же уперлись в конкретный пример. |
Автор: k0rvin 20.3.2014, 14:21 | ||||||
Типа того (правда C, а не C++, но несложно будет подправить):
=>
|