Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
14 / 0 / 0
Регистрация: 23.08.2018
Сообщений: 23
1

ЕГЭ по информатике! Не могу реальзовать ввод данных через пробел

23.08.2018, 18:30. Показов 2321. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. Эта информация в том же виде была разослана в школы. Завуч школы № 50 решила наградить двух учащихся, которые лучше всех в школе сдали информатику. Программа должна вывести на экран фамилии и имена этих учеников.
Если наибольший балл набрало больше двух человек — вывести количество таких учеников.
Если наибольший балл набрал один человек, а следующий балл набрало несколько человек — нужно вывести только фамилию и имя лучшего.
Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников школы № 50.
На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
<Фамилия> <Имя> <Номер школы> <Количество баллов> где <Фамилия> — строка, состоящая не более, чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).

Пример входной строки:
Иванов Иван 50 87
Пример выходных данных:
Круглов Василий Тарасова Дарья
Другой вариант выходных данных:
7
Третий вариант выходных данных:
Гусарский Илья

КОД НУЖЕН НА С++, заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2018, 18:30
Ответы с готовыми решениями:

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

Ввод данных через пробел
Возможно ли, и если возможно то как это сделать, считать с консоли ряд чисел написанных через...

Ввод данных в одну строку через пробел
Нужно сделать Ввод именно как сказано , то есть в одну строку через пробел.Как реализовать ? У меня...

Ввод через пробел. Как остановить ввод. while(cin >> input)
Здравствуйте. Начну с условия задания. Ввести к-во элементов массива. Заполнить массив....

6
603 / 403 / 212
Регистрация: 30.04.2017
Сообщений: 743
23.08.2018, 19:31 2
Лучший ответ Сообщение было отмечено Desertirpipi как решение

Решение

Логика примерно такая, нужно потестировать на входных данных...
Объект cin разбивает данные из консоли по пробелам - так что не нужно ничего своего придумывать.
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
#include <iostream>
#include <string>
 
using namespace std;
 
struct Human {
    string firstName;
    string secondName;
    int schoolNum;
    int balls;
};
int main()
{
    int countHum=0, humanMaxBalls=0;
    Human humans[2];
    Human tmp;
    cin>>countHum;
    for(int i=0; i<countHum; ++i) {
        Human *toInput = nullptr;
        if(humanMaxBalls >= 2) {
            toInput = &tmp;
        }else {
            toInput = &humans[humanMaxBalls];
        }
        cin>>toInput->firstName;
        cin>>toInput->secondName;
        cin>>toInput->schoolNum;
        cin>>toInput->balls;
 
        if (toInput->schoolNum != 50)
            continue;
 
        if (toInput->balls == humans[0].balls) {
            humanMaxBalls++;
        }
        else if(toInput->balls > humans[0].balls) {
            humanMaxBalls=1;
            if(toInput != &humans[0]) {
                humans[0] = *toInput;
            }
        }
        /*else if(toInput.balls < humans[0]) { }*/
    }
 
    if(humanMaxBalls<=2 && humanMaxBalls>0) {
        int i;
        for(i=0; i<humanMaxBalls-1; ++i) {
            cout<<humans[i].firstName<<" "<<humans[i].secondName<<" ";
        }
        cout<<humans[i].firstName<<" "<<humans[i].secondName;
    }else {
        cout<<humanMaxBalls;
    }
    return 0;
}
1
1 / 1 / 0
Регистрация: 23.08.2018
Сообщений: 1
23.08.2018, 22:38 3
Если не трудно, вы не могли бы добавить в ваш код комментарии к каждой строке ?
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
23.08.2018, 23:58 4
desertirpipis, ты не автор поста, тебе-то зачем?
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
#include <iostream>
using namespace std;
int main()
{
    int N;
    cin >> N;
    int bestcount[2] = { 0 };
    int highscore[2] = { 0 };
    char best0[52]="", best1[52]="";
    for (int i = 0; i < N; ++i)
    {
        char name0[52], name1[21];
        int school, score;
        cin >> name0 >> name1 >> school >> score;
        strcat(name0, " ");
        strcat(name0, name1);
        if (score > highscore[0])
        {
            bestcount[1] = bestcount[0];
            bestcount[0] = 1;
            strcpy(best1, best0);
            strcpy(best0, name0);
        }
        else if (score == highscore[0])
        {
            ++bestcount[0];
            if(bestcount[0]==2)
                strcpy(best1, name0);
        }
        else if (score > highscore[1]) 
        {
            bestcount[1]=1;
            if (bestcount[0] == 1)
                strcpy(best1, name0);
        }
        else if (score == highscore[1])
        {
            ++bestcount[1];
        }
    }
    if (bestcount[0] == 2 || bestcount[0] == 1 && bestcount[1] == 1)
        cout << best0 << " " << best1 << endl;
    else if (bestcount[0] == 1)
        cout << best0 << endl;
    else 
        cout << bestcount[0] << endl;
    return 0;
}
0
14 / 0 / 0
Регистрация: 23.08.2018
Сообщений: 23
24.08.2018, 14:35  [ТС] 5
Я автор , просто не мог зайти в аккаунт, создал новый , но теперь все окей. Вы мне поможете с комментариями ?

Добавлено через 4 часа 18 минут
Ты не мог бы написать комментарии к своему коду ? Если не сложно.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
25.08.2018, 14:12 6
Desertirpipi, ты мог восстановить доступ с помощью почты, в чём проблема?
1
sourcerer
25.08.2018, 15:14     ЕГЭ по информатике! Не могу реальзовать ввод данных через пробел
  #7
 Комментарий модератора 
Desertirpipi, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 5.12
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2018, 15:14

Ввод чисел через пробел
Доброго времени суток! Подскажите как правильно сделать. Есть односвязный список. Нужно вводить...

Ввод координат через пробел
Не могу ввести координаты для X2 и Y2, так как сразу после ввода координат Х1, Y1 перескакивает к...

Ввод чисел через пробел
Здравствуйте, подскажите пожалуйста, как вводить числа в одну строку через пробел,а потом ...

Ввод чисел через пробел
Как-нибудь можно ввести числа в одну строку без использования массива? Я погуглил, но везде строка...


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

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