C++ для массовой школы - это все-таки тяжело и вряд ли нужно.
Просто Си, без классов и без ООП, для подготовки к ЕГЭ.
Почему когда говорят "С++", то обязательно думают про классы и ООП?
А вы не подумали, что C++ лучше C для обучения хотя бы тем, что писать cin >> n куда удобней, чем scanf("%d",&n), а также A=new int[N] куда проще, чем A=malloc(N*sizeof(int))?
На самом деле даже C очень тяжело для массовой школы. Например, вот две вещи, которые методически очень плохи в C/C++, просто первое, что приходит в голову с чем я в последнее время мучаюсь:
1. Отсутствие контроля выхода за границы массива.
2. Отсутствие требования обязательной инициализации переменных.
Обе эти вещи, например, приводят к некоторым проблемам, например, программа не работает, ошибку школьник найти не может. Или еще хуже - программа работает, но вылезает за границы массива. Но работает! И попробуйте объяснить, почему вы не принимаете такую программу.
Когда вы учите на C/C++, то очень много усилий уходит на изучение именно особенностей языка программирования, так что даже с точки зрения "подготовки к ЕГЭ" C/C++ - не лучший выбор. Зачем на ЕГЭ писать на языке, на котором писать сложно?
Вот одна из задач C4 ЕГЭ прошлого года:
Заключительный этап олимпиады по астрономии проводился для учеников 9-11-х классов, участвующих в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 50 баллов. Для определения победителей и призеров сначала отбираются 45% участников, показавших лучшие результаты.
По положению, в случае, когда у последнего участника, входящего в 45%, оказывается количество баллов такое же, как и у следующих за ним в итоговой таблице, решение по данному участнику и всем участникам, имеющим с ним равное количество баллов, определяется следующим образом: все участники признаются призерами, если набранные ими баллы больше половины максимально возможных;
все участники не признаются призерами, если набранные ими баллы не превышают половины максимально возможных.
Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая по результатам олимпиады будет определять, какой минимальный балл нужно было набрать, чтобы стать победителем или призером олимпиады.
На вход программе сначала подается число участников олимпиады N. В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:
<Фамилия> <Имя> <класс> <баллы>
где <Фамилия> – строка, состоящая не более, чем из 20 символов,
<Имя> – строка, состоящая не более, чем из 15 символов, <класс> – число от 9 до 11, <баллы> – целое число от 0 до 50 набранных участником баллов. <Фамилия> и <Имя>, <Имя> и <класс>, а также <класс> и <баллы> разделены одним пробелом. Пример входной строки:
Иванов Петр 10 17
Программа должна выводить минимальный балл призера. Гарантируется, что хотя бы одного призера по указанным правилам определить можно.
Вот авторское решение на Паскале:
var
cnt: array[0..50] of integer;
c: char;
i, k, N, b, S, minb: integer;
begin
for i:=0 to 50 do
cnt[i]:=0;
readln(N);
for i:=1 to N do
begin
repeat
read(c);
until c=' ';
repeat
read(c);
until c=' ';
readln(k,b);
cnt[b]:=cnt[b]+1;
end;
S:=0;
b:=50;
while (S + cnt[b])*100<=N*45 do
begin
S:=S+cnt[b];
if cnt[b]>0 then minb:=b;
b:=b-1
end;
if (S+1)*100<=N*45 then
begin
if b>25 then minb:=b
end;
writeln(minb);
end.
Вот решение на Питоне:
N=int(input())
A=[0]*51
for i in range(N):
L=input().split()
A[int(L[-1])] += 1
i = 51
sum = 0
V = N * 45 // 100
while sum < V :
sum += A[i]
i -= 1
i += 1
if sum != V and i <= 25:
i += 1
while A[i] == 0 : i += 1
print(i)
Сравните хотя бы объем кода и его читаемость - а это очень важные критерии именно с точки зрения ЕГЭ.