Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/50: Рейтинг темы: голосов - 50, средняя оценка - 4.66
 Аватар для Sokolov
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125

ЕГЭ Информатика С4

16.04.2011, 13:26. Показов 9833. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько баллов набрал.
В районе считается подозрительной ситуация, когда в школе более двух учащихся набирают одинаковый наибольший балл по школе.
Районный методист решила выяснить номера этих школ.
Программа должна вывести номера этих школ, в любом порядке.
Если аткая школа окажется одна, нужно вывести наибольший балл в этой школе, с указанием того, что это наибольший балл.
Если таких школ не окажется, нужно вывести об этом сообщение.
На вход программе сначала подается число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
<Фамилия> <Имя> <Номер школы> <Кол-во баллов>

Номер школы -целое число от 1 до 99 (В районе школы с некоторыми номерами не существуют)
Кол-во Баллов целое число от 0 до 100

Пример входной строки:
Иванов Иван 50 87

Пример выходных данных:
5 50 74 87
Другой вариант выходных данных:
7
Наибольший балл = 74
Третий вариант выходных данных
Нет таких школ


Я написал такую программу, но как то не работает

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
74
75
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{string str,str1;
int N,i,k,d,m,n,x,max,max1,y=0,num,a[100][100];
bool flag=false;
for(i=0;i<100;i++)
for(int j=0;j<100;j++)
a[i][j]=0;
setlocale(LC_ALL,"Russian");
cout<<"Введите N: ";
cin>>N;
for(i=0;i<N;i++)
{   getline(cin,str);
    str1=str;
    for(int j=0;j<3;j++)
    {
    k=str.find(" ",0);
    str.erase(0,k+1);
    }
    for(int j=0;j<2;j++)
    {
    k=str.find(" ",0);
    str1.erase(0,k+1);
    }
    str1.erase(2,3);
 
 
 
    d=atoi(str1.c_str()); // номер школы
    m=atoi(str.c_str());// кол-во баллов
    n=0; 
    while(a[d][n]!=0)
    n++;    
    a[d][n]=m;
}
 
for(i=0;i<100;i++)
  { max=a[i][0];
    x=0;
      for(int j=0;j<100;j++)
     { 
         
         if(a[i][j]>max)
      {max=a[i][j];
        x=0;}
 
 
         else if (a[i][j]==max&&a[i][j]!=0)
       {x++;
      if(x==2)
      {y++;
       if(y==1)
       {num=i;
       max1=max; }
      }
       if(y==2)
           cout<<num<<" ";
       if(y>1)
           cout<<i<<" ";
         }
 
      }}
 
if(y==1)
{cout<<num<<endl;
cout<<"Наибольший балл: "<<max1<<endl;
}
 
if(y==0)
cout<<"Нет таких школ"<<endl;
return 0;
      }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2011, 13:26
Ответы с готовыми решениями:

ЕГЭ Информатика С2
/*Опишите на русском языке или на одном из языков программирования алгоритм суммирования положительных элементов квадратной матрицы,...

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

ЕГЭ Информатика С2
Найти и вывести наименьший номер элемента массива, равного Х, или сообщение, что такого элемента нет. #include &lt;iostream&gt; using...

9
 Аватар для Sokolov
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
17.04.2011, 16:09  [ТС]
довольно таки интересная задача =)
0
17.04.2011, 16:23

Не по теме:

Цитата Сообщение от Sokolov Посмотреть сообщение
довольно таки интересная задача =)
Это чем же? Это задача из разряда "найти производную", потому что взятие производных - тупая механическая работа, сводящаяся к последовательному применению правил к исходной функции.

1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.04.2011, 16:51
Ну вот, если доп. библиотеками не пользоваться, решил бы так:

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
#include <iostream>
#include <string>
 
typedef struct INFO
{
    std::string name;
    std::string surname;
    int school;
    int score;
} t_struct;
 
 
int main (void)
{
    int N;
    std::cout << "Enter the number of student: ";
    std::cin >> N;
 
    t_struct *MAS;
    MAS = new t_struct [N];
 
    for (int i = 0; i < N; i++)
    {
        std::getline (std::cin, MAS[i].name, ' ');
        std::getline (std::cin, MAS[i].surname, ' ');
        std::cin >> MAS[i].school >> MAS[i].score;
    }
 
    const int SIZE = 100;
    int school_max[SIZE] = {0}; // будем хранить максимумы по каждой школе.
    int school_number_max[SIZE] = {0}; // кол-во максимальных баллов по каждой школе.
 
    for (int i = 0; i < N; i++)
        if (MAS[i].score > school_max[MAS[i].school]) school_max[MAS[i].school] = MAS[i].score; // записываем максимумы.
 
    for (int i = 0; i < N; i++)
        if (MAS[i].score == school_max[MAS[i].school]) ++school_number_max[MAS[i].school]; // считаем кол-во максимумов.
 
    int count = -1;
    int suspicious_school[SIZE]; // будут храниться номера "подозрительных" школ.
 
    for (int i = 0; i < SIZE; i++)
        if (school_number_max[i] > 2)
        {
            ++count;
            suspicious_school[count] = i;
        }
 
    if (count == -1) std::cout << "No schools.";
    else if (count == 0)
    {
        std::cout << suspicious_school[0] << std::endl;
        std::cout << "Max score: " << school_max[suspicious_school[0]];
    }
    else
        for (int i = 0; i <= count; i++)
            std::cout << suspicious_school[i] << " ";
 
    std::cout << std::endl;
    delete (MAS);
    return 0;
}
Да и silent_1991 совершенно прав, просто время было)
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.04.2011, 17:02
Sokolov, Интересного ничего не увидел. Только муторно.

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <string>
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
 
struct person
{
    person(const std::string& n="",
        const std::string& s="",
        const size_t sc_n_=0,
        const size_t note_=0):
    name(n), surname(s), sc_n(sc_n_), note(note_)
    {
    }
    std::string name;
    std::string surname;
    size_t sc_n;
    size_t note;
};
 
std::istream& operator >>(std::istream& is, person& one)
{
    is >> one.name >> one.surname >> one.sc_n >> one.note;
    return is;
}
 
std::map<size_t, std::vector<size_t> > find_notes_in_schools(const std::vector<person>& vec)
{
    std::map<size_t, std::vector<size_t> > notes_in_schools;
    std::vector<size_t> vc;
    for(std::vector<person>::const_iterator iter = vec.begin(); iter != vec.end(); ++iter)
    {
        std::map<size_t, std::vector<size_t> >::iterator m_iter;
        if((m_iter = notes_in_schools.find(iter->sc_n)) != notes_in_schools.end())
            m_iter->second.push_back(iter->note);
        else
        {
            vc.push_back(iter->note);
            notes_in_schools.insert(std::make_pair(iter->sc_n, vc));
            vc.clear();
        }
    }
    return notes_in_schools;
}
 
std::map<size_t, size_t> find_max_notes_in_schools
(const std::map<size_t, std::vector<size_t> >& map)
{
    std::map<size_t, size_t> res;
    for(std::map<size_t, std::vector<size_t> >::const_iterator iter = map.begin();
        iter != map.end(); ++iter)
        res.insert(std::make_pair(iter->first, *std::max_element(iter->second.begin(), iter->second.end())));
    return res;
}
 
std::map<size_t, size_t> find_schools_numbers
(const std::map<size_t, size_t>& max_notes_in_schools,
 const std::vector<person>& persons)
{
    std::map<size_t, size_t> res;
    for(std::vector<person>::const_iterator iter = persons.begin();
        iter != persons.end(); ++iter)
    {
        std::map<size_t, size_t>::const_iterator m_iter;
        if((m_iter = max_notes_in_schools.find(iter->sc_n)) != max_notes_in_schools.end())
        {
            if(iter->note == m_iter->second && res.find(iter->sc_n) == res.end())
                res.insert(std::make_pair(iter->sc_n, 1));
            else if(iter->note == m_iter->second && res.find(iter->sc_n) != res.end())
                ++res[iter->sc_n];
        }
    }
    return res;
}
 
int main()
{
    std::vector<person> vec((std::istream_iterator<person>(std::cin)), std::istream_iterator<person>());
    std::map<size_t, std::vector<size_t> > map = find_notes_in_schools(vec);
    std::map<size_t, size_t> mp = find_max_notes_in_schools(map);
    std::map<size_t, size_t> map_res = find_schools_numbers(mp, vec);
    std::vector<size_t> result;
    for(std::map<size_t, size_t>::iterator iter = map_res.begin();
        iter != map_res.end();
        ++iter)
    {
        if(iter->second > 2)
            result.push_back(iter->first);
    }
    if(result.empty())
        std::cout<<"There are no such schools\n";
    else if(result.size() == 1)
        std::cout<<result[0]<<'\n'<<"Max note is: "<< mp.find(result[0])->second<<'\n';
    else
        std::copy(result.begin(), result.end(), std::ostream_iterator<size_t>(std::cout, " "));
    return 0;
}
1
 Аватар для Sokolov
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
02.05.2011, 15:02  [ТС]
Имеется список результатов голосования избирателей за несколько партий,
в виде списка названий данных партий. При этом некоторые голоса
являются недействительными, в этом случае вместо названия партии
записан один символ «.» (точка). Партия проходит в парламент, если за нее
отдано не менее 7% от общего числа действительных голосов (то есть от
количества строк в списке, которые не равны «.»).
На вход программе в первой строке подается количество избирателей в
списке N. В каждой из последующих N строк записано название партии, за
которую проголосовал данный избиратель, в виде текстовой строки или
один символ «.», если данный голос считается недействительным. Длина
строки не превосходит 50 символов, название может содержать буквы,
цифры, пробелы и прочие символы.
Пример входных данных:
16
Party one
Party two
Party one
Party one
Party two
Party two
.
Party three
Party one
Party one
Party two
Party one
Party two
Party two
Party one
Party two
Программа должна вывести список всех партий, прошедших в парламент, в
произвольном порядке. При этом название каждой партии должно быть
выведено ровно один раз, вне зависимости от того, сколько голосов было
отдано за данную партию.
Пример выходных данных для приведенного выше примера входных данных:
Party one
Party two
При этом следует учитывать, что количество голосов избирателей в исходном
списке может быть велико (свыше 1000), а количество различных партий в
этом списке не превосходит 10.

Я написал программу,но работает некоректно пожалуйста помогите мне найти мою ошибку
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
#include<iostream>
using namespace std;
int main()
{int N,i,j,k=0,golos=0;
string str[10],name;
int time[10];
cin>>N;
for(i=0;i<10;i++)
time[i]=0;
 
for(i=0;i<=N;i++)
{getline(cin,name);
if(name!=".")
{golos++;
for(j=0;j<k;j++)
if(str[j]!=name)
time[j]++;
else 
{str[k]=name;
time[k]++;
k++;
}}
else continue;
}
 
for(i=0;i<k;i++)
if(time[i]*100>=7*golos)
cout<<str[i]<<endl;
 
return 0;
}
Вот решение к этой задаче:
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
Решение на языке C++
#include<iostream>
using namespace std;
int main()
{
int n, Count[10], NumParties=0, NumVotes=0, i, j;
string Names[10], s;
cin>>n;
getline(cin,s);
for(i=0;i<n;++i)
{
getline(cin,s);
if(s!=".")
{
NumVotes++;
j=0;
while(j<NumParties && s!=Names[j])
++j;
if(j<NumParties)
++Count[j];
else
{
Names[j]=s;
Count[j]=1;
++NumParties;
}
}
}
for(i=0;i<NumParties;++i)
if(Count[i]*100>=NumVotes*7)
cout<<Names[i]<<endl;
}
Я не прошу писать код программы, просто пожалуйста покажите мне мою ошибку.
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
02.05.2011, 15:11
В первой задаче кстати говоря, хранение имен и фамилий школьников - излишняя трата памяти, так как данные на решение не влияют: роль играет только последние два числовых параметра строки.
1
 Аватар для Sokolov
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
02.05.2011, 15:19  [ТС]
да с первой я уже давно разобрался )) мне сейчасвторую надо )
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
03.05.2011, 00:02
ну собсно вот:
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
#include <iostream>
using namespace std;
int main()
{int N,i,j,k=0,golos=0;
string str[10],name;
int time[10];
cin>>N;
for(i=0;i<10;i++)
time[i]=0;
 
for(i=0;i<N;i++) // было i=0, i<=N - лишняя итерация
{getline(cin,name);
if(name!=".")
{golos++;
for(j=0;j<k;j++)
if(str[j]!=name)//непонятное условие:если строки не равны - зачем увеличивать тайм?
time[j]++;
else 
{str[k]=name;
time[k]++;//можно было сделать time[k]=1, т.к. оно ноль, но это так, рекомендация
k++;
}}
else continue;
}
 
for(i=0;i<k;i++)
if(time[i]*100>=7*golos)
cout<<str[i]<<endl;
 
return 0;
}
 
/*
кусок с проверкой условия str[j]!=name надо переписать
for (j=0;j<k;j++)
    if (str[j]==name)
    {
        time[j]++;
        break;
    }
    if (j==k-1)
    {
        str[k]=name;
        time[k]++;
        k++;
    }
*/
Нужное отмечено комментариями. Гарантию работы не даю, т.к. щас чето среда глючит, проверить не получается. Но в целом должно быть так. И да, советую форматировать код, а то читать очень тяжело.

PS: Во втором коде в вашем посте есть этот кусок, реализованный только циклов "пока", а не "для".
0
0 / 0 / 0
Регистрация: 29.11.2017
Сообщений: 1
03.05.2011, 23:34
а у меня такой организационный вопрос:
а как собственно когда пишешь программу например в вижуалке проверить себя, то есть как послать себе исходные данные?

Добавлено через 11 минут
все проблема решена)спс
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2011, 23:34
Помогаю со студенческими работами здесь

Егэ информатика 27 задача
Спрошу коротко , почему у меня ошибка на 18 строчке ? #include &lt;iostream&gt; using namespace std ; int main () { int n, i, j ; ...

ЕГЭ Информатика С2 (Массивы)
Здравствуйте, решаю задачи для подготовки к ЕГЭ,все вроде бы легко,но проблема в том, что все ответы на Паскале. Решал такую задачу,...

Логика. Информатика. ЕГЭ
На числовой прямой даны два отрезка : P = и Q = . Выберите такой отрезок A, что формула

(из ЕГЭ) Потянет ли на максимальный балл по С4 информатика?
var a: array of real; i, k, N: integer; min: real; begin readln(N); setlength(a,N+1); min := 1000001; for...

Арифметический корень (книга Мальцев Математика ЕГЭ минимум Подготовка к ЕГЭ 2016)
Помогите, может у кого есть решибник к книге Мальцев Математика ЕГЭ минимум Подготовка к ЕГЭ 2016. Если кому то не жалко времени, решите....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru