Задача по алгоритмам Ӏ Java Syntax: 9 уровень, 11 лекция

  • 12
  • Недоступна
Вместо кубиков жители планеты Линейный Хаос дают своим детям решать задачки на сортировку. Вот вам одна из забавок маленьких упорядоченных изоморфиков, развлекитесь, как следует: после того, как пользователь введет с клавиатуры список слов (и чисел), программа должна вывести слова в возрастающем порядке, а числа — в убывающем.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (595)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
JohnET
12 уровень
3 апреля, 12:34
Задача не сложная, главное составить алгоритм - вот мой: 1.Перебираем исходный массив - создавая на его основе три массив. int[] (шаблон исходного массива) - добавляем в него 1 если элемент число и 0 если строка, попутно заполняя два других массива - один числами другой строками. 2. Выполняем сортировку последних двух массивов - я использовал Collections т.к ИМХО - извращаться с алгоритмом перестановки лом. 3. Выводим данные обращаясь к массиву-шаблону и последовательно к одной из двух отсортированных матриц.
Greq
12 уровень, Омск
1 апреля, 10:12
Задача норм, если разобраться как работает isGreaterThan, а для сравнения чисел переводить их в int
Maks Panteleev
23 уровень, Москва
24 марта, 19:10
да ну ее нахрен эту дебильную задачу) проще с нуля написать чем этим ублюдским больным кодом пользоваться)
Игорь Малый
20 уровень, Николаев
20 марта, 19:46
Не знаю, что сказать, уважаемые. Я делал перерыв в обучении. Но в целом в течение года я возвращался к этой задаче. Она была единственной из задач 9 уровня, которые не были решены. И уж очень она меня бесила. Я уже её сделал пару паз заново самостоятельно. И оно работало. Но валидатор был непреклонен. Сегодня таки собравшись с духом и начав с нуля, я решил... Ну и задача...
Петр
20 уровень, Санкт-Петербург
18 марта, 19:24
не могу поймать ошибку, может кто поможет
Sherminator Senior QA engineer в Банк ВТБ
13 марта, 09:38
Ребят, объясните эту строчку кода, я не понимаю...
String[] array = list.toArray(new String[0]);
Карбофос Огарин
14 уровень, Санкт-Петербург
15 марта, 14:21
Поддержу, мы преобразуем лист в обычный массив, но зачем String, да еще с [0]??
Эдуард Хазиев
14 уровень
1 апреля, 10:33
toArray() - возвращает массив, в котором расположены все элементы текущего списка (от первого до последнего). Принимает в качестве аргумента массив определенного типа. new String[0] - Длина (равна нулю) передаваемого массива меньше, чем длина списка. В этом случае метод создает новый массив и помещает в него элементы списка. Короче toArray() видит что в твой массив с [0], ни хрена не влезет, и создаст свой массив с необходимой длиной.
Jenya
10 уровень, Киев
3 марта, 21:56
по возможности опишите этотт процес, хочу разобраться - чуть не улавливаю for (int i = 0; i < array.length; i++) { for (int j = i + 1; j < array.length; j++) { if (isNumber(array[i]) && isNumber(array[j])) { if (Integer.parseInt(array[i]) < Integer.parseInt(array[j])) { String temp = array[i]; array[i] = array[j]; array[j] = temp; } } else if (!isNumber(array[i]) && !isNumber(array[j])) { if (isGreaterThan(array[i], array[j])) { String temp = array[i]; array[i] = array[j]; array[j] = temp; } } }
Zav_O
19 уровень, Москва
12 марта, 16:21
Зачем скидывать в комментарии к задаче код? это же спойлеры, задай вопрос в помощи, ну
Sherminator Senior QA engineer в Банк ВТБ
24 марта, 20:43
Сполейрнул так сполейрнул, но все равно спасибо, я понял свои ошибки. Могу разжевать код. У тебя есть массив i и ты создаешь копию этого массива j. Далее ты начинаешь проверку первым условием (а число ли в массиве i и число ли в массиве j (перебирая каждый элемент массива j)) и так идешь циклом по массиву j. В этот момент пузырек работает. Как только наткнулся на слово в массиве i, сработал elseif. В этот момент начинает работать пузырек для сравнения слова массива i со словами массива j.
Дмитрий
25 уровень, Москва
26 февраля, 20:30
задача охонь
new Cat("Barsik")
20 уровень, Сызрань
12 февраля, 17:11
Задача класс!!! решил пузырьком только условий по больше.
Error 404
17 уровень, Краснодар
7 февраля, 18:53
Решил по своему)) В методе sort добавил 4 новых списка ArrayList: один с типом String (сюда заносим весь текст) и три с Integer (в один вносим все числа, а в оставшиеся два индексы строк из исходного массива - для чисел и для строк, соответственно). Далее перебор исходного массива с помощью for с условием: - если число if (isNumber(array[i]) == true), то добавляем его в список Integer для всех чисел (незабываем Integer.parseInt() делать) и вносим индекс данного числа в выбранный список; - если строка, аналогично. Все строки в список String, а индексы в Integer. Далее с помощью Collections.sort() сортируем списки со строками и числами, с помощью Collections.reverse() делаем обратную сортировку списка с числами. Далее создаем 2 переменные int (счетчики со значением "0") - они же будущие индексы элементов для наших списков. Далее, так как все элементы в списках уже отсортированы как нам нужно, остается их просто добавить в наш исходный массив. Для этого снова перебираем исходный массив с условием: - если элемент массива число, то на место этого элемента ставим элемент нашего списка с индексом = счетчику (numbers.get(countNumbers)).toString() (обязательно преобразовываем наше число из списка к строке - метод toString()) и наращиваем счетчик; - если элемент массива строка, то просто ставим на его место элемент из списка со строками и наращиваем счетчик array[i] = text.get(countText); countText++; и всё)) P.s. не забыть импортировать класс коллекций, а также в конце метода sort() вызвать метод isGreaterThan(array[0], array[0]). Если не преобразовывать строки в числа в списке для чисел, то их сортировка будет не корректной, например, для строк 9 больше 18.
ASY
17 уровень
7 февраля, 20:26
аналогично рассуждал, только не использовал Collections.sort().
Nikolay
13 уровень, Киев
15 февраля, 13:44
Спасибо!
Дмитрий
14 уровень
23 февраля, 19:04
я в том же направлений был, создал два списка ArrayList <Integer>, ArrayList<String>, только индексы я не стал никуда записывать. Отсортировав коллекциями, я объявил 2 переменные типа инт, и по ним доставал из списков числа и строки, изначальна проверяя не число ли это
for (int i = 0; i < l; i++) {
            String str = array[i];
                if (isNumber(str)) {
                    array[i] = "" + numbers.get(a);
                    a++;
                } else {
                    array[i] = strings.get(b);
                    b++;
                }
            }
        }