Пять победителей

  • 5
  • Недоступна
На корабле JRush прошёл многоэтапный конкурс по скоростному решению задач на массивы среди студентов 7-8 уровней. Среди 20 полуфиналистов пятеро с максимальными баллами считаются победителями. Итак, у нас есть массив с баллами полуфиналистов (баллы могут быть даже отрицательными). Выведем на экран великолепную пятёрку победителей.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (261)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Aleks
18 уровень, Москва
30 марта, 14:18
Не проходил по данному условию "Метод sort() должен сортировать массив чисел от большего к меньшему." Ментор дал подсказку: убедись что сорт может отсортировать любое кол-во введенных данных. Вопрос, а за чем? если мы создали массив из 20 чисел. Откуда появилось дополнительное требование?
Maks Panteleev
20 уровень, Москва
23 марта, 12:56
Как же кайф когда джавараш просит заниматься тем, что НИКОГДА не пригодится)
Viktor Zotov
17 уровень, Vologda
7 марта, 17:30
8 попыток из-за итерации i < 20, а не i < array.length...
Виктория Владимирова
16 уровень, Москва
25 февраля, 12:09
Метод пузырьковой сортировки в помощь. Как разберетесь, как работает код при пузырьковой сортировке от меньшого к большему, потом за минуту от большего к меньшему отсортируете.
Asankheya
12 уровень, Mainframe
24 февраля, 09:46
скопировали наш массив в Integer[]; Arrays.sort(....Collections.reverseOrder()); Integer[] обратно в array[].
Андрей
13 уровень, Красноярск
17 февраля, 15:38
Смотрим сложность задачи, условие, далее разглядываем импорт. Понимаем что хотят чтоб вспомнили старые темы. Вспоминаем и решаем ничего не добавляя в импорт.
VasliyD
22 уровень, Москва
13 февраля, 22:54
Не пойму, почему не валидирует. Вроде работает как надо. Сортирую путём поиска максимального элемента и перестановки его в начало массива с последующим сдвигом левой границы.
int maxIndex,temp;
        for (int i = 0; i < array.length; i++) {
            maxIndex = i;
            for (int j = i; j < array.length; j++) {// поиск максимального элемента в текущем подмассиве
                if (array[j] > array[maxIndex]) {
                    maxIndex=j;
                }
                temp = array[i];                    // перестановка макс. в начало текущего подмассива
                array[i]=array[maxIndex];
                array[maxIndex]=temp;
            }
        }
selfer IllegaArgumentException в вашей программе
14 февраля, 06:43
У тебя метод сортировки не работает. У тебя свап элементов массива безусловный, а так быть не должно. Можешь даже проверить его вот таким способом
public static void main(String[] args) {
        int [] somearr = new int [10]; // Создаем массив на 10 элементов
        for(int i = 0; i < 10; i++){ // заполняем его рандомными числами от 0 до 50
            somearr[i] = (int)(Math.random()*50);
        }
        sort(somearr); // сортируем твоим методом (нужно дописать его код в класс)

        for(int i : somearr){ // Выводим элементы массива, каждый с новой строки
            System.out.println(i);
        }

    }
Он иногда не отрабатывает как надо поэтому, видимо валидацию и не проходит.
VasliyD
22 уровень, Москва
14 февраля, 07:50
Уже разобрался )) перестановку поместил по ошибке во внутренний цикл вместо внешнего. Банальная невнимательность, большинство косяков из-за неё проклятой. 🤦‍♂️
Gaziz
27 уровень, Уфа
16 января, 17:37
понравилось решение отрицание - сорт - отрицание.
Andreas
39 уровень
14 января, 19:34
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int[] array = new int[20];
        for (int i = 0; i < array.length; i++) {
            array[i] = Integer.parseInt(reader.readLine());
        }

        int[] k = sort(array);

        System.out.println(k[0]);
        System.out.println(k[1]);
        System.out.println(k[2]);
        System.out.println(k[3]);
        System.out.println(k[4]);
    }

    public static int[] sort(int[] array) throws Exception{
        //напишите тут ваш код
        List<Integer> b = new ArrayList<Integer>();
        for (int i = 0; i < array.length; i++) {
            b.add(array[i]);
        }
        int[] a = new int[5];
        int max = 0;
        for (int j = 0; j < 5; j++) {
            for (int i = 0; i < b.size(); i++) {
                if (b.get(max) < b.get(i))
                    max = i;
            }
            a[j] = b.get(max);
            b.remove(max);
        }
        return a;
    }
}
Help me) код работает, но ему этого мало
Flexo Bending Unit #3370318
31 января, 09:00
вместо тысячи строк
public static void sort(int[] array) {
    ArrayList<Integer> arrayList = new ArrayList<>();
    for (int i : array) arrayList.add(i);
    Collections.sort(arrayList);
    Collections.reverse(arrayList);
    for (int i = 0; i < array.length; i++) array[i] = arrayList.get(i);
}
Anonymous #2497433
23 уровень
3 февраля, 19:02
и я решил похожим способом, только через обычный for и только потому, что не понял до конца как из массива получить список и наоборот - делал все по шаблону получал ошибку. забил и решил дедовским способом
Даниил Александрович
30 уровень, Тамбов
5 января, 13:51
Java очень загадочный язык с виду такой могучий с кучей библиотек. Но! как только сталкиваемся с оОБЫКНОВЕННОЙй задачей. все ни методов подходящих ни решений все на уровне Си сделай сам. Причем в Си такие вещи делаются через функции а не через фантики и обертки котые в базовом знании языка не предусматривается. посмотрел решения на stackoverflow сообщество такие заковыриситые накидывает причем часто не рабочие. Reverse в одном флаконе с sort это же элементарно в языках высокого уровня на уровне базовых функций. Java ппц такой Java. for(int i=0; i<array.length/2;i++){ int j=array[i]; array[i] = array[array.length-1-i]; array[array.length-1-i] = j; }
selfer IllegaArgumentException в вашей программе
8 января, 11:20
Еще можно извратиться и превратить массив в лист методом asList, его уже можно развернуть методом reverse, а потом вернуть назад toArray.
SEJAVASU
11 уровень, Москва
5 февраля, 02:40
почему в строчке for(int i=0; i<array.length/2;i++){ array.length/2 деление на 2? зачем?
Даниил Александрович
30 уровень, Тамбов
5 февраля, 16:48
наша задача развернуть массив. а это значит пройти ровно половину. берем самую первую и меняем ее местами с последней. всего 5 элементов целая половина от деления на 2 - это 2 прохода... начальный массив: 1,2,3,4,5 первый ход 5,2 3,4,1 и второй конечный: 5,4,3,2,1 магия! это как палку повернуть на 180 градусов. если пройти весь массив палку придется повернуть на 360 градусов это реверсия случится дважды все окажется в начальном состоянии. на 17 уровне объяснят как это делать колекциями. Collections.reverse(ArrayList); удачи!
SEJAVASU
11 уровень, Москва
27 февраля, 21:30
ооооо до 17 как до китая, только билет купить))) спасибо