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

  • 12
  • Недоступна
Вместо кубиков жители планеты Линейный Хаос дают своим детям решать задачки на сортировку. Вот вам одна из забавок маленьких упорядоченных изоморфиков, развлекитесь, как следует: после того, как пользователь введет с клавиатуры список слов (и чисел), программа должна вывести слова в возрастающем порядке, а числа — в убывающем.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (257)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Renat10 уровень, Екатеринбург
9 часов назад
Когда увидел условие испугался,но в итоге решил за час 1.Цикл while который перестанет работать если все на своих местах 2.В цикл while вложил цикл for(int i) 3.В цикле for(int i) проверял array[i] буква или цифра и в зависимости от этого запускался еще один из двух цикл for(int k) 4.Проверял для цифры и менял местами если true
if (isNumber(array[k]) && Integer.parseInt(array[i])>Integer.parseInt(array[k]))
5.Аналогично для буквы
if (!isNumber(array[k]) && isGreaterThan(array[k],array[i]))
Mikhail Kopylov10 уровень
позавчера, 09:05
Я решил в три этапа без введения дополнительных массивов: 1) отсортировал весь массив пузырьком, как строки в возрастающем порядке. В этом случае все числа будут в первой части массива; 2) с помощью метода isNumber нашел, где кончается первая часть массива с числами; 3) отсортировал первую часть массива пузырьком, как числа по убыванию.
Edffom11 уровень, Мирный
среда, 13:37
Вчера открыл почитал - и закрыл - думаю такое я никогда не решу. Сегодня решил со второй попытки. Интересная задачка. Спасибо за курс.
Vladimir Tanski16 уровень, Тель-Авив
4 октября, 13:02
Прикольная задача, мозги пошевелились . Решил ее двумя баблсортами , первый проходил по массиву искал первое и второе число , парсил и сравнивал между с собой и если нужно менял местами , второй аналогично только с стрингами.
Антон14 уровень, Минск
30 сентября, 22:08
У меня так решилось: 1. Создал три массива: "слова", "цифры" и "порядок". И три перем. int - для нумерации ячеек каждого массива. 2. Раскидываю основной массив: цифры к цифрам (Integer.valueOf()), слова к словам, а в порядок - то, в каком порядке это всё шло. 3."Пузырьком" сортирую слова с помощью isGreaterThan(String s, String s1) и цифры с помощью Arrays.sort(int []). 4. Присваиваю каждой следующей ячейке основного массива значения массивов "цифры" и "слова" в том порядке, который указан в массиве "порядок". И зелёный экран загорелся (правда, со второго раза...)
Artem Boyarshinov17 уровень, Москва
24 сентября, 13:10
Для автоматизированной проверки вместо объявления списка и цикла while можно вставить:
ArrayList<String> list = new ArrayList<>(Arrays.asList("Вишня", "1", "Боб", "3", "Яблоко", "22", "0", "Арбуз"));
Andrii15 уровень
17 сентября, 17:18
Решил так: - разобрал оригинальный массив на два ArrayList один для цифр, другой для строк - отсортировал оба, реверснул лист чисел - чтоб соответствовать условию задачи. - в цикле брал оригинальный массив, проверял методом isNumber, цифра ли это и if-ом, используя итератор, заменял соответствующий элемент массива. Почему брал итератор - хотел все сделать в одном цикле, потому мне нужно было получать следующий элемент соответствующего листа (строкового или числового), а не брать их элементы по переменной цикла i. Потому, что array.length, больше, чем длина листа чисел и листа строк. - использовал метод isGreaterThan, так как его было обязательно вызывать, но результаты его работы нигде не использовал.
Artem Boyarshinov17 уровень, Москва
24 сентября, 13:07
Решил абсолютно так же :)
Nikowl13 уровень
16 сентября, 18:39
Обратите внимание! Метод compareTo() упорядочивает строки в алфавитном порядке, лексикографически и с учетом регистра. Подробнее тут. Я блин кучу времени убил из-за того что не обратил внимание на "пример вывода", где можно заметить, что строки выстроены в алфавитном порядке, а не по длине строк.
Владюня11 уровень, Киев
30 сентября, 14:19
да , я тоже сразу подумал, что нужно выводить по длине строки)
Андрей Вайно20 уровень
15 сентября, 12:52
Как сделал я. 1. Создал 2 листа Integer и String, распределил туда вводимые строки из массива, через проверки. 2. Отсортировал Инт лист, отсортировал Строковый лист. (Здесь кто как горазд) 3. Залил обратно в изначальный массив Строки и Инты по условию, что сейчас по индексу перед нами. Если в массиве Строка, то берём из Строкового листа строку по индексу 0, записываем в тот же индекс массива, что только что прочитали и сразу удаляем её из листа. Если != строка, то берём из Инт листа и по аналогии удаляем. 4. После всего проделанного улыбнул NullPointerException. )
Артём Уколов16 уровень, Москва
6 сентября, 23:12
Вот реально задолбался решать эту задачу. Все циклы и сортировки сделал правильно но все равно косяк был с цифрами только потом понял что алфавитный метод сравнения который катит для String он не так сравнивает цифры как надо по этому для сравнения надо прибегать к Integer.parseInt(s) как только понял сразу за 5 мин все решил, а до этого не мог понять часа 3