Досрочный вариант ЕГЭ 2018 по информатике задание №27
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны.
Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов не делится на 34.
Описание входных и выходных данных
В первой строке входных данных задаётся количество чисел N (1≤N≤1000).
В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов не кратно 34.
Пример входных данных:
5
3
4
10
11
17
Пример выходных данных для приведённого выше примера входных данных:
8
Пояснение. Из заданных чисел можно составить 10 попарных произведений: 3·4, 3·10, 3·11, 3·17, 4·10, 4·11, 4·17, 10·11, 10·17, 11·17 (результаты: 12, 30, 33, 51, 40, 44, 68, 110, 170, 187). Из них на 34 не
делятся 8 произведения (3·4=12, 3·10=30, 3·11=33, 3·17=51, 4·10=40, 4·11=44, 10·11=110, 11·17=187).
Требуется написать эффективную по времени и по памяти программу для решения описанной задачи.
Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз.
Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 Кбайт и не увеличивается с ростом N.
Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти, – 4 балла.
Максимальная оценка за правильную программу, эффективную только по времени – 3 балла.
Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, – 2 балла
Решение:
Программа на языке Pascal. (4б)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var i,n,x,k2,k17,k34,n34,R: integer; begin readln(n); k2:=0;k17:=0;k34:=0; for i:=1 to n do begin readln(x); if (x mod 34=0) then inc(k34) else if (x mod 17 =0) then inc(k17) else if (x mod 2=0) then inc(k2); end; n34:=n-k34; {количество чисел, не кратное 34} R:=(n*(n-1) div 2) - k34*n34 - k2*k17 - k34*(k34-1) div 2; writeln(R); end. |
Программа на языке C++. (4б)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; int main() { int i,n,x,k2,k17,k34,n34,R; cin>>n; k2=0;k17=0;k34=0; for(i=1;i<=n;i++){ cin>>x; if (x % 34 == 0) k34++; else if (x % 17 == 0) k17++; else if (x % 2 == 0) k2++; } n34=n-k34; //количество чисел, не кратное 34 R=(n*(n-1) / 2) - k34*n34 - k2*k17 - k34*(k34-1) / 2; cout<<R; return 0; } |
Программа на языке Python. (2б)
|
1 2 3 4 5 6 7 8 9 10 11 |
a = [] n = int(input()) for i in range(0, n): a.append(int(input())) d = 1 count = 0 for i in range(0, n - d): for j in range(i + d, n): if a[i] * a[j] % 34 != 0: count += 1 print(count) |
