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

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

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

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

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

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

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

24
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
15.04.2021, 15:00
Как бы вы решали такую задачу на псевдокоде?
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
15.04.2021, 18:25
Программа:
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));
    }
}
Пример ввода:
Code
1
2
3
4
5
4
Vasya 1
Petya 1
Tima 0
Vasgen 15
Вывод:
Code
1
[Applicants{appraisal=15, name='Vasgen'}, Applicants{appraisal=1, name='Petya'}, Applicants{appraisal=1, name='Vasya'}, Applicants{appraisal=0, name='Tima'}]
В принципе-то вывод можно сделать более красивым.
0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
15.04.2021, 20:32
А если под грибами, то можно вот так
Кликните здесь для просмотра всего текста

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);
 
    }
}
Code
1
2
3
4
5
6
7
House=5
Awilson=4
Caddie=4
Bwilson=3
Sidorov=3
Ivanov=2
Petrov=1
1
15.04.2021, 21:33

Не по теме:

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

0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
15.04.2021, 21:48
Цитата Сообщение от Tavashi Посмотреть сообщение
два "Ивановых" однофамильца
Да, но как соединить два массива в стриме, чтобы между их значениями была связь и не используя при этом мап или отдельный класс я хызы=(
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.04.2021, 11:47
GreeNicee, тот случай, когда стримы не подходят.
0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
16.04.2021, 11:53
Цитата Сообщение от Tavashi Посмотреть сообщение
тот случай, когда стримы не подходят.
Так под грибами же дело было, вот и подошли
1
 Аватар для Aviz__
2758 / 2065 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
16.04.2021, 17:47
Цитата Сообщение от GreeNicee Посмотреть сообщение
отдельный класс
так сделай с ним, тут даже канабис не нужен))
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.04.2021, 19:03
Цитата Сообщение от GreeNicee Посмотреть сообщение
Да, но как соединить два массива в стриме, чтобы между их значениями была связь
IntStream по индексам, не?
1
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
16.04.2021, 22:40
Цитата Сообщение от 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
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
16.04.2021, 22:54
А в чем вообще преимущество использования стримов?
Решения становятся менее понятными, а производительность вроде бы не растёт. Тогда какой от них смысл?
0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
16.04.2021, 23:14
Цитата Сообщение от Coffeini Посмотреть сообщение
А в чем вообще преимущество использования стримов?
Стильно, модно, молодежно)

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

А вообще реально удобная штука же - для примера выше нужно было бы создавать отдельный класс, или массив и сортировать его, а потом еще раз и заняло бы это все строк 15-20, много строк не значит плохо конечно, но зачем писать 15 строк, если можно 4=) Мой второй вариант в этой теме вроде вполне понятен - сделали счетчик с индексами, с его помощью отсторировали по фамилиям, а потом по оценкам и вывели=) 1 строка 1 действие и того 4=)
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
17.04.2021, 00:16
Цитата Сообщение от 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
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.04.2021, 09:00
Цитата Сообщение от Coffeini Посмотреть сообщение
Зачем писать 4 строки, когда можно 1)
Да, использовать в данной задаче Map.Entry, да еще и без собсно Map, а сложеных в массив - это высший пилотаж
0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
17.04.2021, 09:02
Цитата Сообщение от 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
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
17.04.2021, 16:28
GreeNicee, ну вы слинковали два массива через индексы, а интересней было бы через структуры данных (то, о чем вы изначально подумали). Через индексы можно тоже слинковать в 4-5 строчек и без стримов.

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

Не по теме:

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

0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
17.04.2021, 17:03
Цитата Сообщение от Tavashi Посмотреть сообщение
Так это ему и адресовано было.
ой, я слепой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.04.2021, 17:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru