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

  • 12
  • Недоступна
Вместо кубиков жители планеты Линейный Хаос дают своим детям решать задачки на сортировку. Вот вам одна из забавок маленьких упорядоченных изоморфиков, развлекитесь, как следует: после того, как пользователь введет с клавиатуры список слов (и чисел), программа должна вывести слова в возрастающем порядке, а числа — в убывающем.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (304)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Алексей11 уровень, Мариуполь
7 часов назад
Что б не перегружать мозг, сначало написал код для сортировки строк, пузырьком. Затем, тот же самый код использовал для сравнения чисел(только вместо метода isGreaterThan, использовал Integer.parseInt(array[i]) что бы сравнить числа).
Андрей11 уровень, Львов
4 декабря, 22:54
ох и задачка, пришлось дописать два метода сортировки(метод вставки и обратной пузырьковой сортировки для чисел) и прописать комментарии чтобы не забыть что делал - потратил 3 часа на нее.
leksa13 уровень, Москва
30 ноября, 10:23
спойлеры: что-то заморочился и пошел сложным путем. 1. Сначала из одного массива перевел элементы в два отдельных: в одном слова, в другом - числа. 2. сделал сортировку массивов со словами и числами (сортировка пузырьком, в случае со словами при сравнении используем метод isGreaterThan) 3. Заменил значения из двух массивов в изначальный (сравнивал в изначальном - слово это или число, если число - заменял на значение из массива чисел, если слово - из массива со словами). Самое сложное оказалось - определиться типом массивов. Мне пришлось поменять, чтобы не было ограничений по количеству элементов (так как неизвестно, сколько значений будет введено). Надеюсь, у вас получится проще. Успехов!
Egor10 уровень, Санкт-Петербург
21 ноября, 12:57
Делал с сохранением порядка строк как в примере. С удивлением обнаружил в комментах что можно было перемешивать. - записал индексы чисел в новый массив - записал индексы строк в другой новый массив - пузырьковой сортировкой бежал по основному и сравнивал только ячейки в которых лежат числа - тоже самое, но для строк
Nastya10 уровень, Санкт-Петербург
12 часов назад
Спасибо тебе, я перебрала столько вариантов, но твой понравился больше всего и сработал. Тяжело даются мне алгоритмы, надо порешать побольше задач на эту тему.
Natasha Bert13 уровень, Szczecin
21 ноября, 12:30
Со всеми скобками получилось на 25 строк. Интересно, это норм?
Савва12 уровень, Санкт-Петербург
20 ноября, 21:23
Методом пузырька получилось очень коротко и лаконично... Подсказка: по сути метод isNumber позволяет нам разделить один массив на два, с числами и строками (isNumber(array[i]) && isNumber(array[j]), пройдет только по числам)
Serp201515 уровень, Тольятти
20 ноября, 07:34
isGreaterThan - использовать только для сравнения букв. if(Integer.parseInt(array[i]) > Integer.parseInt(array[j])) - использовать для сравнения чисел. Иначе 9 получается больше 18. Косяк с условием задачи, либо подстава.
Alexander Podlesny18 уровень, Москва
18 ноября, 22:27
решил задачу так, как показано в примере: строки сортируются по возрастанию, числа по убыванию, при этом числа после сортировки находятся только там, где были числа до сортировки Ввод: Вывод: Вишня Арбуз 1 22 -15 21 Кек Боб 21 3 Боб Вишня 3 1 Яблоко Кек 22 0 -145 -15 0 -145 Арбуз Яблоко Валидатор ругается что числа не сортируются. Люблю такие задачи
IceBerg41 уровень, Кривой Рог
20 ноября, 00:32
А ты код в "Помощь" отправь, может народ и подскажет, где у тебя ошибка.
Денис15 уровень, Москва
вчера, 03:07
Такая же история с этой задачей. Удалось убедить валидатор?
Виталий12 уровень, Санкт-Петербург
17 ноября, 18:35
Решил по алгоритму Ильяса - код очень компактный.
Рустам Гизатуллин23 уровень, Москва
12 ноября, 11:09
Задачу можно решить, используя однократную сортировку строк. Поскольку нужно сортировать строки, то если применить обычное сортировку строк, то цифры окажутся в самом верху списка, но к сожалению, сортировка будет неправильная впереди окажутся строки имеющих вид "1","11","2",… что то нас категорически не устраивает. Поэтому если в процедуре сравнения проводить сравнение цифр отдельно от строк и в обратном порядке, то получится что цифры соберутся сверху сортированные в убывающем порядке, а строки в возрастающем, что и требовалось в задаче. Для этого необходимо внести правки в метод isGreaterThan
public static boolean isGreaterThan(String a, String b) {
    if (isNumber(a) && isNumber(b)) {
        return Integer.parseInt(a)<Integer.parseInt(b);
    }
    return a.compareTo(b) > 0;
}
ну а дальше провести сортировку
Andrey18 уровень, Астрахань
13 ноября, 22:20
я так понимаю этот метод ты засовываешь в пузырьковую сортировку? а если а -число, а b - строка?
Рустам Гизатуллин23 уровень, Москва
14 ноября, 06:32
Ну да, пузырьковую сортировку. Мой код работает исходя из предположения, что что вводимые данные содержат только цифры и буквы. Поскольку в таблице символов цифры расположены выше чем, буквы, то при сортировке цифры будут всегда выше букв. Сейчас, я бы после первой проверки добавил ещё одно условие, что при сравнении строк которые являются цифрами и строк не цифр цифра должна строка с цифрами должна быть выше
else if (isNumber(a) && !isNumber(b)) return false;
        else return true;
Andrey18 уровень, Астрахань
14 ноября, 09:58
я не критикую и не докапываюсь, я просто не очень понимаю процесс. я имелл ввиду, какое значение примет isGreaterThan .в зависимости от этого в пузырьке либо будет компоновка в одном блоке( верхнем или нижнем) либо не будет. - я правильно понимаю?если добавить третий if - то однозначно будет блок чисел, который будет сдвинут вверх или вниз в зависимости от
else if (isNumber(a) && !isNumber(b)) return false true;
        else return true false;
? лично я решил задачу с дикими костылями, не используя isGreaterThan.
Рустам Гизатуллин23 уровень, Москва
14 ноября, 11:41
Да с учетом Вашей правки все строки содержащие цифры окажутся вверху независимо от того содержат они только буквы или ещё, например другие символы, которые в таблице символов расположены раньше цифр, например ".", "-" и т.д.