Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 02.03.2020
Сообщений: 24
1

Отсортировать список абитуриентов по убыванию оценок

15.04.2021, 13:20. Показов 1974. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В решении задачи необходимо использовать линейные массивы.
Даны два массива - список фамилий абитуриентов и список соответствующих им оценок по ЕГЭ. Отсортировать список абитуриентов по убыванию оценок, в случае совпадения оценки сравнивать абитуриентов по фамилии.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2021, 13:20
Ответы с готовыми решениями:

Дан список оценок по математике 30-ти абитуриентов. Кого больше: троечников, четверочников или пятерочников?
Дан список оценок по математике 30-ти абитуриентов. Кого больше: троечников, четверочников или...

Есть N универов и K абитуриентов. Вывести список их предпочтений по убыванию
Всем привет, в универе задали такую задачу: есть N универов и K абитуриентов. У тех и у других есть...

Составить список зачисленных абитуриентов в порядке убывания балла и список абитуриентов с полупроходным баллом
Решение задач с использованием структурированных типов данных Помогите, пожалуйста. Беда с...

Список(List) как отсортировать по убыванию используя функции reverse(); sort(); ао убыванию
Нужно отсортировать список по убыванию используя функции reverse(); и sort(); если можно фул прогу...

24
1115 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,859
15.04.2021, 15:00 2
Как бы вы решали такую задачу на псевдокоде?
0
642 / 356 / 131
Регистрация: 01.02.2020
Сообщений: 1,064
Записей в блоге: 1
15.04.2021, 18:25 3
Программа:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Main {
    static class Applicants implements Comparable<Applicants> {
        private int assessment;
        private String name;
 
        public Applicants(String name, int assessment) {
            this.assessment = assessment;
            this.name = name;
        }
 
 
        public int getAssessment() {
            return assessment;
        }
 
        public void setAssessment(int assessment) {
            this.assessment = assessment;
        }
 
        public String getName() {
            return name;
        }
 
        public void setName(String name) {
            this.name = name;
        }
 
        @Override
        public int compareTo(Applicants applicants) {
            if (applicants.assessment == assessment) {
                return name.compareTo(applicants.name);
            } else {
                return Integer.compare(applicants.assessment, assessment);
            }
        }
 
        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("Applicants{");
            sb.append("appraisal=").append(assessment);
            sb.append(", name='").append(name).append('\'');
            sb.append('}');
            return sb.toString();
        }
    }
 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//Input the number of applicants
        Applicants[] applicants = new Applicants[n];
 
        for (int i = 0; i < n; ++i) {
            applicants[i] = new Applicants(in.next(), in.nextInt());//On each new line, enter the name and grade of the applicant
        }
 
        Arrays.sort(applicants);
        System.out.println(Arrays.toString(applicants));
    }
}
Пример ввода:
Код
4
Vasya 1
Petya 1
Tima 0
Vasgen 15
Вывод:
Код
[Applicants{appraisal=15, name='Vasgen'}, Applicants{appraisal=1, name='Petya'}, Applicants{appraisal=1, name='Vasya'}, Applicants{appraisal=0, name='Tima'}]
В принципе-то вывод можно сделать более красивым.
0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
15.04.2021, 20:32 4
А если под грибами, то можно вот так
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
 
public class Main {
    public static void main(String[] args) {
        final int[] assessments = {1, 2, 3, 5, 4, 3, 4};
        final String[] surnames = {"Petrov", "Ivanov", "Sidorov", "House", "Caddie", "Bwilson", "Awilson"};
 
        IntStream.range(0, surnames.length).boxed()
                .collect(Collectors.toMap(
                        i -> surnames[i],
                        i -> assessments[i],
                        Integer::sum,
                        TreeMap::new))
                .entrySet().stream()
                .sorted((o1, o2) -> o2.getValue() - o1.getValue())
                .forEach(System.out::println);
 
    }
}
Код
House=5
Awilson=4
Caddie=4
Bwilson=3
Sidorov=3
Ivanov=2
Petrov=1
1
Tavashi
15.04.2021, 21:33
  #5

Не по теме:

GreeNicee, два "Ивановых" однофамильца сольются воедино увеличив "свою" оценку аж до 100% от максимальной :)

0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
15.04.2021, 21:48 6
Цитата Сообщение от Tavashi Посмотреть сообщение
два "Ивановых" однофамильца
Да, но как соединить два массива в стриме, чтобы между их значениями была связь и не используя при этом мап или отдельный класс я хызы=(
0
1115 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,859
16.04.2021, 11:47 7
GreeNicee, тот случай, когда стримы не подходят.
0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
16.04.2021, 11:53 8
Цитата Сообщение от Tavashi Посмотреть сообщение
тот случай, когда стримы не подходят.
Так под грибами же дело было, вот и подошли
1
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
16.04.2021, 17:47 9
Цитата Сообщение от GreeNicee Посмотреть сообщение
отдельный класс
так сделай с ним, тут даже канабис не нужен))
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,390
16.04.2021, 19:03 10
Цитата Сообщение от GreeNicee Посмотреть сообщение
Да, но как соединить два массива в стриме, чтобы между их значениями была связь
IntStream по индексам, не?
1
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
16.04.2021, 22:40 11
Цитата Сообщение от iSmokeJC Посмотреть сообщение
IntStream по индексам, не?
Спасибо за наводку, набиваю руку еще со стримами и как-то сначала в голову пришла мысль с мапом двух массивов=) хотя по сути я уже там сделал инт стрим для индексов=)
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Comparator;
import java.util.stream.IntStream;
 
public class Main {
    public static void main(String[] args) {
        final int[] assessments = {1, 2, 3, 5, 4, 3, 4};
        final String[] surnames = {"Petrov", "Ivanov", "Sidorov", "House", "Caddie", "Bwilson", "Awilson"};
 
        IntStream.range(0, assessments.length).boxed()
                .sorted(Comparator.comparing(o -> surnames[o]))
                .sorted(((o1, o2) -> assessments[o2] - assessments[o1]))
                .forEach(i -> System.out.printf("Student:%s, assessment:%s\n", surnames[i], assessments[i]));
    }
}

Bash
1
2
3
4
5
6
7
Student:House, assessment:5
Student:Awilson, assessment:4
Student:Caddie, assessment:4
Student:Bwilson, assessment:3
Student:Sidorov, assessment:3
Student:Ivanov, assessment:2
Student:Petrov, assessment:1
Цитата Сообщение от Aviz__ Посмотреть сообщение
так сделай с ним, тут даже канабис не нужен))
Так не интересно=)
0
642 / 356 / 131
Регистрация: 01.02.2020
Сообщений: 1,064
Записей в блоге: 1
16.04.2021, 22:54 12
А в чем вообще преимущество использования стримов?
Решения становятся менее понятными, а производительность вроде бы не растёт. Тогда какой от них смысл?
0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
16.04.2021, 23:14 13
Цитата Сообщение от Coffeini Посмотреть сообщение
А в чем вообще преимущество использования стримов?
Стильно, модно, молодежно)

Они компактные, удобные, вполне понятные (если их какое-то время поиспользовать (как, в принципе, и любой механизм в яп) + параллельные стримы при обработке данных больших объемов работают быстрее (по идее)

А вообще реально удобная штука же - для примера выше нужно было бы создавать отдельный класс, или массив и сортировать его, а потом еще раз и заняло бы это все строк 15-20, много строк не значит плохо конечно, но зачем писать 15 строк, если можно 4=) Мой второй вариант в этой теме вроде вполне понятен - сделали счетчик с индексами, с его помощью отсторировали по фамилиям, а потом по оценкам и вывели=) 1 строка 1 действие и того 4=)
0
642 / 356 / 131
Регистрация: 01.02.2020
Сообщений: 1,064
Записей в блоге: 1
17.04.2021, 00:16 14
Цитата Сообщение от GreeNicee Посмотреть сообщение
параллельные стримы
Ну вот это уже полезная фича. Стоит разобраться.

Цитата Сообщение от GreeNicee Посмотреть сообщение
15 строк, если можно 4=)
Зачем писать 4 строки, когда можно 1)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//Input the number of applicants
 
        Map.Entry<Integer, String>[] applicants = new AbstractMap.SimpleEntry[n];
        for (int i = 0; i < n; ++i) {
            applicants[i] = new AbstractMap.SimpleEntry<>(in.nextInt(), in.next());//On each new line, enter the name and grade of the applicant
        }
        
        Arrays.sort(applicants, (entry, t1) -> t1.getKey().compareTo(entry.getKey()) == 0 ? entry.getValue().compareTo(t1.getValue()) : t1.getKey().compareTo(entry.getKey()));
        System.out.println(Arrays.toString(applicants));
    }
}
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,390
17.04.2021, 09:00 15
Цитата Сообщение от Coffeini Посмотреть сообщение
Зачем писать 4 строки, когда можно 1)
Да, использовать в данной задаче Map.Entry, да еще и без собсно Map, а сложеных в массив - это высший пилотаж
0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
17.04.2021, 09:02 16
Цитата Сообщение от Coffeini Посмотреть сообщение
когда можно 1)
Стримы формально тоже можно в одной строке записать, но это будет не так читабельно + до этой 1 строчки, вам пришлось написать 3 на создание мапа и его заполнение (даже если возьмем массивы как по условию задачи ТС'а) + одну на вывод
Цитата Сообщение от Coffeini Посмотреть сообщение
Arrays.sort(applicants, (entry, t1) -> t1.getKey().compareTo(entry.getKey()) == 0 ? entry.getValue().compareTo(t1.getValue()) : t1.getKey().compareTo(entry.getKey()));
П.с. А если разделить вашу 1 не супер читабельную строку на несколько то будет менее красиво и понятно, чем со стримами имхо)
П.с. п.с. а вообще дело вкуса наверное, если не брать в расчет возможность подрубить параллельный стрим для обработки данных больших объемов (а на этот счёт я не уверен, т.к. не возникала необходимость в данной фиче пока что)
0
1115 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,859
17.04.2021, 16:28 17
GreeNicee, ну вы слинковали два массива через индексы, а интересней было бы через структуры данных (то, о чем вы изначально подумали). Через индексы можно тоже слинковать в 4-5 строчек и без стримов.

Цитата Сообщение от Coffeini Посмотреть сообщение
Зачем писать 4 строки, когда можно 1)
Вы упростили себе задачу - на входе два массива, а не "предложение" заполнять данные через ввод:
Цитата Сообщение от Alena13_1 Посмотреть сообщение
Даны два массива
0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
17.04.2021, 16:55 18
Цитата Сообщение от Tavashi Посмотреть сообщение
Вы упростили себе задачу - на входе два массива, а не "предложение" заполнять данные через ввод:
Не я упростил, а Coffeini, решил сделать ввод для пользователя) в условии просто 2 массива)
Цитата Сообщение от Alena13_1 Посмотреть сообщение
Даны два массива
А структуры данных я еще не вспоминал( да и связь через индексы мне кажется в данном случае будет более адекватным вариантом=)
0
Tavashi
17.04.2021, 16:59
  #19

Не по теме:

Цитата Сообщение от GreeNicee Посмотреть сообщение
Не я упростил, а Coffeini, решил сделать ввод для пользователя) в условии просто 2 массива)
Так это ему и адресовано было.

0
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
17.04.2021, 17:03 20
Цитата Сообщение от Tavashi Посмотреть сообщение
Так это ему и адресовано было.
ой, я слепой
0
17.04.2021, 17:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2021, 17:03
Помогаю со студенческими работами здесь

Вывести список студентов каждой группы по убыванию оценок
Я - камень. Буду очень благодарен, если кто-то поможет с решением данных задач. 1) Три группы...

Создать список студентов с оценками по нескольким дисциплинам. Отсортировать список по убыванию среднего балла. Имеющих двойки удалить из списка.
Помогите сделать лабу задание:Создать список студентов с оценками по нескольким дисциплинам....

Создать список студентов с оценками по нескольким дисциплинам. Отсортировать список по убыванию среднего балла. Имеющих двойки удалить из списка.
Помогите, пожалуйста, с задачей... Создать список студентов с оценками по нескольким дисциплинам....

Отсортировать список по убыванию
Помогите, пожалуйста, решить Магазин мебели загружает машину для доставки купленных товаров на...

Отсортировать по убыванию список
Указатели Предусмотреть контроль за размером динамически распределяемой памяти (ДРП), а также ее...

Считая фамилии абитуриентов и их оценки после первого экзамена исходными данными, составить список абитуриентов, допущенных ко второму экзамену
Задача 3. При поступлении в университет лица, получившие оценку &quot;неудовлетворительно&quot; на первом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru