![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
pikiviki |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.3.2014 Репутация: нет Всего: нет |
Здравствуйте.
Программа сначала должна вывести наименьшее трехзначное число а потом наибольшее трехзначное число. Из последовательности чисел входного потока. ![]() Хотел все это дело решить с помощью сортировок. Но сортировка отсортирует мне допустим 130 как 310(но это же не наименьшее число)... Так, что сортировка не поможет. Прочекал разные алгоритмы ничего подходящего не нашел. Может, что есть в STL если запулить все данные в вектор допустим? Помогите чем сможете. Это сообщение отредактировал(а) pikiviki - 15.3.2014, 23:15 |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Сортировка вполне годится, только надо ее применять чуть менее топорно.
Если отсортировать все цифры по убыванию, то получится наибольшее возможное число. Если отсортировать все цифры по возрастанию, то получится наименьшее возможное число, однако тут нужно обработать одно исключение из правила - если первой цифрой (или цифрами) окажется "0", его нужно поменять местами с первой ненулевой. Ну а STL для сортировки трех цифр... это как убивать воробья даже не из пушки, а сразу атомной бомбой. ![]() |
|||
|
||||
Lukkoye |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Судя по текстовому описанию:
1. Что бы получить наименьшее - нужно отсортировать от меньшего к большему. 2. Что бы получить наибольшее - нужно отсортировать от большего к меньшему. Полученное в итоге число следует дополнить нулями до трех-значного. Если нужно добавить 2 нуля - добавляем их в конце. Если нужно добавить 1 ноль - добавляем его в середину. Это сообщение отредактировал(а) Lukkoye - 16.3.2014, 00:39 |
|||
|
||||
pikiviki |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 15.3.2014 Репутация: нет Всего: нет |
Фантом я решил жахнуть с ядерной бомбы)) Потому, что писать функцию для сортировки или саму сортировку мне лень. Вот, что у меня получилось может кому будет интересно.
Если кто знает как улучшить буду только рад. Только не судите строго за мой ###кодинг.
Это сообщение отредактировал(а) pikiviki - 16.3.2014, 11:24 |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Если входной поток будет из миллиона цифр, то и вектор ваш будет содержать миллион элементов.
Не слишком ли много, для того чтобы выбрать всего 3 макс. и 3 мин. числа? |
|||
|
||||
Lukkoye |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
||||
|
||||
OpenGL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 18.4.2008 Репутация: нет Всего: нет |
Не пользоваться сортировкой вообще. Читать входной поток и считать, сколько раз какая цифра встретилась. Затем для максимального числа выводим <все девятки><все восьмерки>....<все единицы><все нули> Минимальное получается чуть сложнее. Сначала выведем наименьшее число, имеющееся у нас и не являющееся нулем. Затем <все нули><все единицы>...<все восьмерки><все девятки>. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
посмотри задачу, не будет тут никаких миллионов. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
я хотел сказаьть что потоковые функции так не пишут. а вы уперлись в конкретный пример с тремя числами. короче ладно... не поняли меня. пихайте потоки в векторы и сортируйте. ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
volatile, это вы не поняли
здесь 3 и только 3 push_back(). откуда миллион? |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
ну про "потоковые функции" это вообще ваша маленькая выдумка. ясно же что требование заключалось в использовании istream а не fscanf, только и всего
Добавлено через 1 минуту и 30 секунд см. также таблицу в первом посте |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
baldina, я просто хотел сказать, что программист должен писать эффективно
когда в условиях написано про потоковую функцию, то это значит что программа должна обрабатывать поток prog << some.txt поток подразумеват под собой размер неизвестного размера он может быть и 3, как в данном конкретном примере, а может быть и сколько угодно большим запихивать весь поток в вектор, и потом его сортировать, чтоб найти всего три числа это совершенно неэффективная операция. мягко говоря. вы же уперлись в конкретный пример. |
|||
|
||||
k0rvin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Типа того (правда C, а не C++, но несложно будет подправить):
=>
-------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |