Готовимся с ребёнком к ЕГЭ, не могу решить задачу.
Есть N целых положительных чисел (не более 1000 штук). Из них формируются все возможные пары. Необходимо определись количество пар, у которых сумма нечетна, а произведение делится на цело на 3. Например, для чисел 1,2,3,4 заданным условиям удовлетворяют 2 пары: 2 и 3, 3 и 4.

Можно решить задачу "в лоб", с использованием массива и вложенных циклов (язык программирования Pascal ABC):

```1c
    program zadacha27;
    var
    N,i,j,S :integer;
    M: array[1..1000] of integer;

    begin
    S:=0;
    write('Введите количество чисел:');
    readln(N);
    write('Введите числа:');
    for i:=1 to N do readln (M[i]);
    for i:=1 to N - 1 do
    for j:=i+1 to N do
    if ((M[i]+M[j]) mod 2 = 1) and ((M[i]*M[j]) mod 3 = 0) then S:= S+1;
    writeln('Ответ:', S);
    end.
```

Однако такое решение считается неэффективным по быстродействию и памяти и за него даётся только 2 балла.
Чтобы получить максимальные 4 балла нужно написать программу так, чтобы в ней не использовались массивы и вложенные циклы. Общий вид решения должен быть примерно таким:

```1c
    program zadacha27;
    var
    N :integer;{количество чисел}
    a :integer;{очередное число}
    S :integer;{результат}
    n2, n3 :integer;{количество четных чисел и количество чисел,делящихся на 3}
    i :integer;
    {возможно потребуются другие или дополнительные переменные}

    begin
    S:=0; n2:=0; n3:=0;
    write('Введите количество чисел:');
    readln(N);
    write('Введите числа:');
    for i:=1 to N do begin
    readln (a);
    if a mod 2 = 0 then n2:=n2+1
    if a mod 3 = 0 then n3:=n3+1
    {здесь может происходить подсчет других переменных}
    end;
    S:= .......... {некое арифметическое вырожение с использованием n2, n3 и/или других переменны}
    writeln('Ответ:', S);
    end.
```

То есть в том же цикле, к котором осуществляется ввод чисел, должны рассчитываться некие промежуточные величины и уже после завершения цикла из них должен рассчитываться ответ. Задача по сути дела из области комбинаторики.

Вот пример из более простой задачи "посчитать количество пар, произведение которых делится на 26":
в цикле считаем следующие величины: n26, n13, n2 - количество чисел, делящихся на 26,13 и 2 соответственно,
результат = n26 * (n26 - 1) / 2 + n26 * (N - n26) + n2 * n13.
---
Чтобы решить задачу так как приведено в примере, нужно решать итеративно (пошагово). Решение должно быть получено на каждом шаге.
Условие нечетности суммы чисел означает что одно из них четное, второе нечетное.
Условие делимости произведения на 3 означает, что как минимум одно из них делится на 3.

Проверку на нечетность суммы сделаю так:
На каком-то шаге у нас будет N четных и M нечетных чисел, к ним добавляем одно. Оно может быть либо четным, либо нечетным. Если оно нечетное - количество нечетных сумм увеличивается на N, иначе на M. Понятно? Если нечетных чисел 10, а четных 3 , то добавив число 5 мы увеличим число нечетных сумм на 3 , это 5 в сумме со всеми четными вариантами..

Проверку на количество вариантов делимых на 3 сделаю так:
Всего у меня есть X чисел и Y из них кратны трем, добавляю к ним одно. Если это число кратно трем - я получу X новых пар кратных трем (произведение каждого из Х и нового числа), а если оно не кратно трем - число новых произведений кратных трем возрастет на число Y. Всего было 10 чисел из которых 4 кратны трем, добавляю тройку - имею 10 новых пар, добавляю двойку - 4 новые пары.

Теперь нужно пересечь условия, чтобы получить результат.
1) Если число а кратно трем, то количество пар вырастет на число ранее известных четных, либо нечетных чисел
2) Если а не кратно трем, количество пар вырастет на число четных кратных трем, либо нечетных, кратных трем

В принципе задача уже решена и можно писать код, но наверняка условия можно соединить в одно, или записать проще.

КОД: На языке 1С , ибо паскаль я забыл 20 лет назад.

```1c
    ЧислоНечетных=0
    ЧислоЧетных=0
    ЧислоНечетныхКратныхТрем =0
    ЧислоЧетныхКратныхТрем=0
    ЧислоНужных=0
    Для ном=1 по 1000 цикл
    а = ВвестиЗначение();
    Если а%3=0 тогда
    Если а%2=0 тогда
    ЧислоНужных=ЧислоНужных+ЧислоНечетных
    ЧислоЧетныхКратныхТрем = ЧислоЧетныхКратныхТрем+1
    ЧислоЧетных=ЧислоЧетных+1
    Иначе
    ЧислоНужных=ЧислоНужных+ЧислоЧетных
    ЧислоНечетныхКратныхТрем = ЧислоНечетныхКратныхТрем +1
    ЧислоНечетных=ЧислоНечетных+1
    КонецЕсли
    Иначе
    Если а%2=0 тогда
    ЧислоНужных=ЧислоНужных+ЧислоНечетныхКратныхТрем
    ЧислоЧетных=ЧислоЧетных+1
    Иначе
    ЧислоНужных=ЧислоНужных+ЧислоЧетныхКратныхТрем
    ЧислоНечетных=ЧислоНечетных+1
    КонецЕсли
    КонецЕсли
    КонецЦикла
    Сообщить("Имеется "+ЧислоНужных+ "пар удовлетворяющих условиям задачи")
```
---
```1c
    Количество = 1000;
    Массив = Новый Массив;
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    Текст = ";
    Для Сч = 1 По Количество Цикл
    СлучайноеЧисло = ГСЧ.СлучайноеЧисло(1, 1000);
    Массив.Добавить(СлучайноеЧисло);
    Текст = Текст + СлучайноеЧисло + " ";
    КонецЦикла;
    //Сообщить(Текст);

    Результат = 0;

    Для Сч1 = 0 По Количество - 1 Цикл
    Для Сч2 = Сч1 + 1 По Количество - 1 Цикл
    Если (Массив[Сч1] + Массив[Сч2]) % 2 <> 0 И (Массив[Сч1] * Массив[Сч2]) % 3 = 0 Тогда
    //Сообщить("Пара " + Массив[Сч1] + " и " + Массив[Сч2]);
    Результат = Результат + 1;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Сообщить(Результат);

    Четных = 0;
    Нечетных = 0;
    Четных3 = 0;
    Нечетных3 = 0;

    Для Сч = 0 По Массив.ВГраница() Цикл
    Число = Массив[Сч];
    Если Число % 3 = 0 Тогда
    Если Число % 2 = 0 Тогда
    Четных3 = Четных3 + 1;
    Иначе
    Нечетных3 = Нечетных3 + 1;
    КонецЕсли;
    Иначе
    Если Число % 2 = 0 Тогда
    Четных = Четных + 1;
    Иначе
    Нечетных = Нечетных + 1;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    Результат = Четных3 * Нечетных + Нечетных3 * Четных + Четных3 * Нечетных3;
    Сообщить(Результат);
```
---
аналогичная задача тут решение на паскале. Да и вообще есть масса сайтов где все ЕГЭ уже решены до нас. Надо только переложить решение на нужный язык программирования.
---
Вы не дочитали до конца вопрос и выдали первую попавшуюся в гугле ссылку. В самом последнем абзаце я как раз привел в качестве примера задачу, на которую вы ссылаетесь. Но она не аналогичная, а более простая.
---
Чтобы решить задачу так как приведено в примере, нужно решать итеративно (пошагово). Решение должно быть получено на каждом шаге.
Условие нечетности суммы чисел означает что одно из них четное, второе нечетное.
Условие делимости произведения на 3 означает, что как минимум одно из них делится на 3.

Проверку на нечетность суммы сделаю так:
На каком-то шаге у нас будет N четных и M нечетных чисел, к ним добавляем одно. Оно может быть либо четным, либо нечетным. Если оно нечетное - количество нечетных сумм увеличивается на N, иначе на M. Понятно? Если нечетных чисел 10, а четных 3 , то добавив число 5 мы увеличим число нечетных сумм на 3 , это 5 в сумме со всеми четными вариантами..

Проверку на количество вариантов делимых на 3 сделаю так:
Всего у меня есть X чисел и Y из них кратны трем, добавляю к ним одно. Если это число кратно трем - я получу X новых пар кратных трем (произведение каждого из Х и нового числа), а если оно не кратно трем - число новых произведений кратных трем возрастет на число Y. Всего было 10 чисел из которых 4 кратны трем, добавляю тройку - имею 10 новых пар, добавляю двойку - 4 новые пары.

Теперь нужно пересечь условия, чтобы получить результат.
1) Если число а кратно трем, то количество пар вырастет на число ранее известных четных, либо нечетных чисел
2) Если а не кратно трем, количество пар вырастет на число четных кратных трем, либо нечетных, кратных трем

В принципе задача уже решена и можно писать код, но наверняка условия можно соединить в одно, или записать проще.

КОД: На языке 1С , ибо паскаль я забыл 20 лет назад.

```1c
    ЧислоНечетных=0
    ЧислоЧетных=0
    ЧислоНечетныхКратныхТрем =0
    ЧислоЧетныхКратныхТрем=0
    ЧислоНужных=0
    Для ном=1 по 1000 цикл
    а = ВвестиЗначение();
    Если а%3=0 тогда
    Если а%2=0 тогда
    ЧислоНужных=ЧислоНужных+ЧислоНечетных
    ЧислоЧетныхКратныхТрем = ЧислоЧетныхКратныхТрем+1
    ЧислоЧетных=ЧислоЧетных+1
    Иначе
    ЧислоНужных=ЧислоНужных+ЧислоЧетных
    ЧислоНечетныхКратныхТрем = ЧислоНечетныхКратныхТрем +1
    ЧислоНечетных=ЧислоНечетных+1
    КонецЕсли
    Иначе
    Если а%2=0 тогда
    ЧислоНужных=ЧислоНужных+ЧислоНечетныхКратныхТрем
    ЧислоЧетных=ЧислоЧетных+1
    Иначе
    ЧислоНужных=ЧислоНужных+ЧислоЧетныхКратныхТрем
    ЧислоНечетных=ЧислоНечетных+1
    КонецЕсли
    КонецЕсли
    КонецЦикла
    Сообщить("Имеется "+ЧислоНужных+ "пар удовлетворяющих условиям задачи")
```
---
Я примерно так и подозревал. Но там где-то ошибочка вкралась. На контрольном примере 1,2,3,4 выдаёт ответ 1, а надо 2. Хотя на примере 1,2,3,4,5,6,7,8,9 выдает правильно 11.
---
1,2,3,4

```1c
    ЧислоНечетных=0
    ЧислоЧетных=0
    ЧислоНечетныхКратныхТрем =0
    ЧислоЧетныхКратныхТрем=0
    ЧислоНужных=0
    Добавим 1
    ЧислоНечетных=1
    ЧислоЧетных=0
    ЧислоНечетныхКратныхТрем =0
    ЧислоЧетныхКратныхТрем=0
    ЧислоНужных=0
    Добавим 2
    ЧислоНечетных=1
    ЧислоЧетных=1
    ЧислоНечетныхКратныхТрем =0
    ЧислоЧетныхКратныхТрем=0
    ЧислоНужных=0
    Добавим 3
    ЧислоНечетных=2
    ЧислоЧетных=1
    ЧислоНечетныхКратныхТрем =1
    ЧислоЧетныхКратныхТрем=0
    ЧислоНужных=1
    Добавим 4
    ЧислоНечетных=2
    ЧислоЧетных=2
    ЧислоНечетныхКратныхТрем =1
    ЧислоЧетныхКратныхТрем=0
```

ЧислоНужных=2
---
удалось надыбать официальное идеальное решение:

Пусть в результате подсчёта получилось, что в наборе данных
m1 нечётных чисел, не кратных 3;
m2 чётных чисел, не кратных 3;
m3 нечётных чисел, кратных 3;
m6 чётных чисел, кратных 3.
Тогда количество удовлетворяющих условию пар можно определить по
формуле m1m6 + m2m3 + m3m6.

То есть в цикле считаются все варианты чисел, а после цикла результат рассчитывается по формуле. Ребёнку так понятнее будет и меньше вероятность накосячить.
---
Именно такое решение дано в (5)
Только это не решение, а ответ. Одна из причин нелюбви апологетов классических экзаменов к ЕГЭ - это сосредоточенность на ответах, без решений. В то время как в реальных задачах ценится умение решать, так как ответ вообще не известен и, зачастую, не существует.
---
Да ладно, это одно и то же. Просто у вас прямо в цикле результат подсчитывается, а тут после цикла. Можно и так и эдак ответить, в любом случае будет 4 бала.

Печально то, что я не заметил решение в (5). Оно было свёрнуто, я увидел в начале слово "Массив" и ГенераторСлучайныхЧисел и решил, что Slava Kron просто прикалывается. Видимо я слишком расслабился на выходных.
---
```1c
    Количество = 1000;
    Массив = Новый Массив;
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    Текст = ";
    Для Сч = 1 По Количество Цикл
    СлучайноеЧисло = ГСЧ.СлучайноеЧисло(1, 1000);
    Массив.Добавить(СлучайноеЧисло);
    Текст = Текст + СлучайноеЧисло + " ";
    КонецЦикла;
    //Сообщить(Текст);

    Результат = 0;

    Для Сч1 = 0 По Количество - 1 Цикл
    Для Сч2 = Сч1 + 1 По Количество - 1 Цикл
    Если (Массив[Сч1] + Массив[Сч2]) % 2 <> 0 И (Массив[Сч1] * Массив[Сч2]) % 3 = 0 Тогда
    //Сообщить("Пара " + Массив[Сч1] + " и " + Массив[Сч2]);
    Результат = Результат + 1;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Сообщить(Результат);

    Четных = 0;
    Нечетных = 0;
    Четных3 = 0;
    Нечетных3 = 0;

    Для Сч = 0 По Массив.ВГраница() Цикл
    Число = Массив[Сч];
    Если Число % 3 = 0 Тогда
    Если Число % 2 = 0 Тогда
    Четных3 = Четных3 + 1;
    Иначе
    Нечетных3 = Нечетных3 + 1;
    КонецЕсли;
    Иначе
    Если Число % 2 = 0 Тогда
    Четных = Четных + 1;
    Иначе
    Нечетных = Нечетных + 1;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    Результат = Четных3 * Нечетных + Нечетных3 * Четных + Четных3 * Нечетных3;
    Сообщить(Результат);
```