Задача по алгоритмам

  • 12
  • Недоступна
Вместо кубиков жители планеты Линейный Хаос дают своим детям решать задачки на сортировку. Вот вам одна из забавок маленьких упорядоченных изоморфиков, развлекитесь, как следует: после того, как пользователь введет с клавиатуры список слов (и чисел), программа должна вывести слова в возрастающем порядке, а числа — в убывающем.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (348)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Андрей10 уровень, Москва
четверг, 18:11
Совершил мерзость, обманул валидатора. А дело было так. Создал четыре списка, один строчный, и три целых. Раскидал по ним значения и номера в колонке. Потом значения отсортировал и циклом записал обратно, используя номера позиции двух массивов. Валидатор не пропустил, хотя всё работало. Говорит надо использовать при сортировке метод isGreaterThan, а я использовал Collections.sort (). Тут я пошел на подлость , тупо воткнул этот метод int h=0; isGreaterThan (array[h], array[h+1]); чтобы был, поскольку на пузырьки сил уже нет. Прокатило.
Caleepso10 уровень, Москва
16 февраля, 19:23
Уже была похожая задачка, решилась довольно лаконично: 2 цикла: внешний идет по i от 0 до конца, внутренний по j от i+1 до конца; внутренний цикл содержит if (проверяем, что i - это число и докручиваем логику с сортировкой последующих чисел в массиве) и else (проверяем, что i - это НЕ число и докручиваем логику с сортировкой строк в массиве)
Asad Vice19 уровень, Минск
12 февраля, 21:15
Дивный сон автора этой задачи : Берём значит мы массив стрингов, в котором вперемешку цифры, строки - сортируем массив с использованием супер метода isGreaterThan.(числа отсортируются по возрастанию первой цифры, т.е 2, 22, 3, 4, 55, 6, и тд тп) - пишем гениальный цикл сортировки цифр, можем свой, можем пузырьком, хоть шелл, хоть расческа, я изобрёл свою сортировку, которая свапала числа, при условии с использованием супер метода isNumber() текущего и предыдущего , а на else увеличивала счётчик. - Дрожащими пальцами нажимаем Ctrl + Alt + A - Смотрим на зелёные флажки валидатора, одной рукой кликаем на переход на 10 уровень, а другой вытираем слёзы счастья. Боже! как гениально я придумал! Довольный автор уходит спать... Кошмары наяву: ну нахрена так зубы рвать через задницу? Неужели где то встречается многомиллионный массив(!) со стрингами и цифрами вперемешку(!)? Ведь большая часть времени - работа с коллекциями, не массивами. Ладно, у нас есть такой говно-массив, но зачем так извращаться с сортировкой? сделай 2 массива, распихай по ним цифры-стринги, отсортируй как надо, склей обратно. Если небольших размеров конечно, в пределах тысяч. Эта дендрофекальная стоматология порядком веселит. Ведь полёт извращённой фантазии видно уже в условии.
Peter18 уровень, Москва
7 февраля, 14:26
Фиг знает, что там курили авторы задачи, но решение мне увиделось следующее: Первым делом - нафиг лишние сущности. Раз уж нам дали массив, то его и будем курочить. Сначала сделаем предварительную сортировку массива: все цифры собираем в начале, все строки -- в конце. Для этого заводим два указателя: на начало массива, и на конец. Во внешнем цикле сдвигаем вправо указатель на начало, пока не найдем строку (не число) или не упремся во второй указатель. Как только нашли строку, начинаем во внутреннем цикле сдвигать влево указатель на конец, пока не найдем число или не упремся в первый указатель. Если нашли, то меняем их местами. После этой процедурки у нас все числа оказываются в начале массива, все слова в конце, и второй указатель показывает на границу между этими подмассивами (последнее число, или первый символ, смотря как реализовать). Замечаем, что в среднем случае наш алгоритм просмотрит элементы массива n раз и сделает примерно n/2 перестановок. Довольно шустро. Ну а дальше дело за малым. Пишем два компаратора (отдельно для срок и отдельно для цифр), и сортируем обе части массива стандартным Arrays.sort(), передавая в метод нужный компаратор и границы наших подмассивов. Сложность O(N*Log(N)), Осталось только обмануть валидатор, вызвав разок для виду isGreaterThan(), чтоб не верещал без толку.
Константин10 уровень
11 февраля, 12:08
а разве не нужно чтобы список остался таким же как первоначальный, ну чтоб если первым был стринг, вторым инт, третьим стринг,четвертым стринг....и тд то и на выходе должна быть сохраненна такая же последовательность? по крайней мере глядя на пример, я решал так.
Peter18 уровень, Москва
11 февраля, 12:54
В условиях задачи ничего об этом не сказано.
Константин10 уровень
11 февраля, 13:27
да, я уже ниже прочитал 😀
Anton11 уровень
5 февраля, 20:03
Я ему этому валидатору переменную через бесконечный цикл шатал.... IceBerg41 уровень, Кривой Рог 21 октября 2019, 23:34 Это уже нюансы ввода через браузерное окно, там нет консоли как таковой, просто ячейка в которую можно загнать тест, и тогда во время чтения этого текста, в конце будет получено значение null, вызвать метод isEmpty() у null объекта естественно невозможно. Обычная консоль, например в Idea, работает всегда, и готова принимать данные всегда, там null поймать не выйдет, и всё будет работать корректно. Решение - использовать Idea, если всё же через сайт - добавить доп. проверку на null, или в ячейке текста добавить пустую строку. В Idea все работает, тут ошибка...звиздец я на измене был.
Дмитрий18 уровень, Киев
2 февраля, 17:23
Подсказка: В условии задачи не сказано, что надо следовать примеру вывода. Т.е. вы можете отсортировать свой массив таким образом: 22 3 1 0 Арбуз Боб Вишня Яблоко И это будет корректно, так как не противоречит условию. Но, если хотите чутка усложнить, то конечно можете следовать "примеру вывода" :) P.S. задача так же легко решается без создания доп. массивов/коллекций. Всем отличного дня:)
Александр14 уровень, Екатеринбург
4 февраля, 07:54
В данном примере, как и в некоторых других, вопрос к работе валидатора. Сортировкой чисел, как строк, нельзя добиться их нормальной сортировки. Попробуй, ради эксперимента, заменить 1 на 108, например. Но валидатор такой вариант тоже примет))
Илья 12 уровень, Москва
2 февраля, 16:03
в "пример вывода" не ясно по какому правилу числа и слова между собой отсортированы. Почему после "арбуз" не сразу "Боб"? Или почему "1" и "0" идут подряд?
Lex Shkirida14 уровень
28 января, 17:31
Сразу знал как решить но из-за маленькой ошибки потратил весь день. Задача супер
timaxoff13 уровень, Санкт-Петербург
27 января, 12:09
похоже я малость туповат ибо мой алгоритм состоит из одних костылей: - создаем 2 списка - String и Integer - создаем массив order - проверяем элементы array на isNumber, если да - парсим в список Integer, а в order заносим -1, если нет - добавляем в другой список, а в order добавляем 1. - сортируем список String пузырьком - психуем и сортируем список Integer с помощью .sort и .reverse - вводим 2 каунтера - один для числового списка, другой для строкового - обращаемся к массиву order. Если -1, то в array(изначальный массив) заносим элемент из списка с integer (не забудь .toString). Инкрементируем каунтер. Если же элемент order'a равен 1, то заносим элемент уже из списка со строками. Не забудь инкрементировать другой каунтер. - вуаля! вы мастер костылей!
Антон12 уровень, Казань
30 января, 09:21
Это жестко конечно:) Достаточно в методе sort написать два вложенных цикла for, где и провести сортировку. Нужно только условие добавить на проверку число это или строка. З.Ы. если интересно, могу скинуть
timaxoff13 уровень, Санкт-Петербург
30 января, 10:53
Да, поделись в личку, пожалуйста.
Jhinigami13 уровень, Минск
31 января, 16:59
А можете мне тоже скинуть пожалуйста ? было бы интересно посмотреть, на такое решение
Антон10 уровень
16 февраля, 15:41
Вы не одни такие ))
Никита Сычев17 уровень, Санкт-Петербург
24 января, 19:36
Плюсую всем комментам без доп. списков. Пузыпек + проверка число/нечисло