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

Программа, которая будет определять фамилию и имя лучшего участника, не ставшего победителем олимпиады

05.05.2020, 17:56. Показов 1181. Ответов 1

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста с решением задачи
си++ На вход программе сначала подается число участников олимпиады N (ограничение 500). В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:

<Фамилия> <Имя> <класс> <баллы>

где <Фамилия> – символьная строка (не более 20 символов), <Имя> – символьная строка (не более 15 символов), <класс> – число от 7 до 11, <баллы> – целое число набранных участником баллов. <Фамилия> и <Имя>, <Имя> и <класс>, а также <класс> и <баллы> разделены одним пробелом. Пример входной строки:

Семенов Егор 11 225

Победителем олимпиады становится участник, набравший наибольшее количество баллов, при условии, что он набрал более 200 баллов. Если такое количество баллов набрали несколько участников, то все они признаются победителями при выполнении условия, что их доля не превышает 20% от общего числа участников.

Победителем олимпиады не признается никто, если нет участников, набравших больше 200 баллов, или больше 20% от общего числа участников набрали одинаковый наибольший балл.

Напишите программу, которая будет определять фамилию и имя лучшего участника, не ставшего победителем олимпиады. Если таких участников несколько, т.е. если следующий за баллом победителей один и тот же балл набрали несколько человек, или, если победителей нет, а лучших участников несколько (в этом случае именно они являются искомыми), то выдается только количество искомых участников. Гарантируется, что искомые участники (участник) имеются.

Программа должна выводить через пробел фамилию и имя искомого участника или их количество. Пример выходных данных (один искомый участник):

Семенов Егор

Второй вариант выходных данных (несколько искомых участников):

12
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2020, 17:56
Ответы с готовыми решениями:

Строки. Программа выводит на экран фамилию и имя участника, набравшего максимальное количество баллов.
Напишите пожалуйста задачу: На городской олимпиаде по информатике участникам было предложено выполнить 3 задания, каждое из которых...

Фамилию и имя участника, набравшего максимальное количество баллов.
на вход программы подаются сведения о результах участников,в 1 строке вводится количество участников N Напишите программу,которая будет...

Вывести на экран фамилию и имя участника набравшего максимальное количество баллов
задача 6. на городской олимпиаде по информатике участникам было предложено выполнить 3 задания, каждое из которых оценивалось по...

1
75 / 48 / 28
Регистрация: 07.01.2019
Сообщений: 168
05.05.2020, 23:06
Правда непонятно зачем тут о победителях написано и людьми с > 200 баллов, по факту нам эти данные не нужны, так как мы ищем не победителей, а лучших участников, но в коде кусок для их подсчета есть, вдруг нужно будет.
C++
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
class Participant {
private:
    std::string surname;
    std::string name;
    int class_;
    int points;
public:
    friend std::istream& operator >>(std::istream& in, Participant& prtp);
    int get_points() const;
    std::string get_surname() const;
    std::string get_name() const;
    Participant();
    ~Participant();
};
std::istream& operator >>(std::istream& in, Participant& prtp) {
    in >> prtp.surname >> prtp.name >> prtp.class_ >> prtp.points;
    return in;
}
 
int Participant::get_points() const { return this->points; } 
 
std::string Participant::get_surname() const { return this->surname; }
 
std::string Participant::get_name() const { return this->name; }
 
Participant::Participant() : surname{ "" }, name{ "" }, class_{ 0 }, points{ 0 }{}
Participant::~Participant() {}
 
void input_data(const int& N, std::vector<Participant>& arr_participant) {
    Participant tmp;
    for (int i = 0; i < N; i++) {
        std::cin >> tmp;
        arr_participant.push_back(tmp);
    }
}
 
void determine_winner(std::vector<Participant>& arr_participant) {
    
    std::vector<Participant>::iterator max_points_greater_200 = std::max_element(arr_participant.begin(), //участник с max баллом > 200
        arr_participant.end(),
        [](const Participant& el1, const Participant& el2) { return el1.get_points() < el2.get_points() && el2.get_points() > 200; }
    );
    int quantity_greater_200 = std::accumulate(arr_participant.begin(), //участников больше 200 баллов с одинаковым результатом
        arr_participant.end(),
        0,
        [max_points_greater_200](int counter, const Participant& el) { return (el.get_points() > 200 && el.get_points() == max_points_greater_200->get_points() ? counter += 1 : counter += 0); }
    );
    std::vector<Participant>::iterator max_points_less_200 = std::max_element(arr_participant.begin(), //участник с max баллом < 200
        arr_participant.end(),
        [](const Participant& el1, const Participant& el2) { return el1.get_points() < el2.get_points() && el2.get_points() < 200; }
    );
    int quantity_less_200 = std::accumulate(arr_participant.begin(), //участников меньше 200 баллов с одинаковым результатом
        arr_participant.end(),
        0,
        [max_points_less_200](int counter, const Participant& el) { return (el.get_points() < 200 && el.get_points() == max_points_less_200->get_points() ? counter += 1 : counter += 0); }
    );
    if (quantity_less_200 == 1) { std::cout << max_points_less_200->get_surname() << " " << max_points_less_200->get_name() << std::endl; }
   
    else { std::cout << quantity_less_200 << std::endl; }
}
 
int main(){
    int N{ 0 };
    std::cout << "Введите N" << std::endl;
    std::cin >> N;
    std::vector<Participant> arr_participant(N);
    input_data(N, arr_participant);
    determine_winner(arr_participant);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2020, 23:06
Помогаю со студенческими работами здесь

Программа, которая по паролю будет определять уровень доступа сотрудника к секретной информации в базе данных
Написать программу, которая по паролю будет определять уровень доступа сотрудника к секретной информации в базе данных. Доступ к базе имеют...

Программа, которая будет приветствовать игрока и запрашивать его имя/ник
Помогите написать, простую программу (как мне сказали) но на мой взгляд она адская, потому что я чайник-мега. Написать программу...

Вывести номер и результат лучшего участника
Известны результаты каждого из участников соревнований по лыжным гонкам (время, затраченное на прохождение дистанции гонки). Спортсмены...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru