Задание №9 ЕГЭ Информатика с ответом и решением
Ответ: 2241
Условие
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел.
Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
— в строке только одно число повторяется ровно два раза, остальные числа различны;
— среднее арифметическое неповторяющихся чисел строки не больше суммы повторяющихся чисел.
В ответе запишите только число.
Подсказки — как подойти к решению
- Сначала отфильтруй строки по структуре чисел: различных значений в строке должно быть ровно на одно меньше, чем самих чисел, и одно значение встречается дважды.
- Сумма повторяющихся чисел получается как сумма всех чисел строки минус сумма различных значений; тогда сумма неповторяющихся — это сумма различных минус найденная сумма повторяющихся.
- Среднее неповторяющихся считается по числу неповторяющихся позиций, а условие «не больше» допускает равенство, поэтому сравнение делай нестрогим; пометь строки единицами и нулями, сложи пометки, а данные удобно обработать программой, сохранив таблицу как CSV.
Решение
Сохраним файл в формате «.txt» и решим задачу с помощью языка Python:
count = 0
f = open('9.txt')
for s in f:
arr = list(map(int, s.split()))
rep = sum(arr) - sum(set(arr))
mean_unrep = sum(set(arr) - {rep}) / 4
if len(set(arr)) == 5 and mean_unrep <= 2 * rep:
count += 1
print(count)
Ответ: 2241.
Приведем другое решение от Мокрушина Николая.
В ячейку G1 помещаем формулу =СЧЁТЕСЛИ($A1:$F1;A1) и копируем её на диапазон G1:L6400. Данная формула выдаст в ячейках количество раз, которое встречается в строке каждое число.
В ячейку M1 запишем формулу =СУММ(G1:L1)-7 и скопируем ее на диапазон M1:M6400. Если значение в ячейке равно 1, то в строке есть повторяющиеся числа, причем только одно число повторяется ровно два раза, остальные числа различны.
В ячейку N1 запишем формулу =ЕСЛИ(G1 = 2;A1;0) и скопируем её на диапазон N1:S6400. В данных ячейках выведутся повторяющиеся числа в строках, удовлетворяющих условию задачи.
В ячейку T1 запишем формулу =ЕСЛИ(M1 = 1; СУММ(A1:F1);0) и скопируем её на диапазон T1:T6400. Данная формула считает сумму всех ячеек в строках, удовлетворяющих условию задачи.
В ячейку U1 запишем формулу =СУММ(N1:S1) и скопируем её на диапазон U1:U6400. Данная формула считает сумму всех повторяющихся чисел в строках, удовлетворяющих условию задачи.
В ячейку V1 запишем формулу =(T1-U1)/4 и скопируем её на диапазон V1:V6400. Данная формула считает среднее арифметическое неповторяющихся чисел в строках, удовлетворяющих условию задачи.
В ячейку W1 запишем формулу =ЕСЛИ(И(V1<=U1;M1 = 1);1;0) и скопируем её на диапазон W1:W6400. Данная формула выведет значение 1, если строка удовлетворяет всем условиям задачи.
В ячейке X1 посчитаем все строки, удовлетворяющие условиям задачи, с помощью формулы =СУММ(W1:W6400) и получим ответ — 2241.
Примечание. В файле приведенного задания ФИПИ используются нули, что противоречит определению натуральные числа. Данная опечатка не влияет на ответ.
Приведём решение Файзуллина Владимира (Пермь) на языке Python.:
def kp(x):
pk=[]
for i in range(len(x)):
pk+=[x.count(x[i])]
return pk
k=0
for a in open('9.txt'):
s1 = 0
s2 = 0
x = list(map(int, a.split()))
kel = kp(x)
id = sum([1,1,1,1,2,2])
if sum(kel) == id:
for i in range(len(x)):
if kel[i] == 2:
s1 += x[i]
if kel[i] == 1:
s2 += x[i]
if s2/4 <= s1:
k += 1
print(k)
Приведём решение Михаила Глинского на языке Python.:
f = open('9.txt')
k = 0
for s in f:
m=[int(x) for x in s.split()]
if len(set(m))==5:
mp = [x for x in m if m.count(x)==2]
mn = [x for x in m if m.count(x)==1]
if sum(mn) / 4 <= sum(mp): k+=1
print(k)
Примечание. Файл следует сохранить в формате txt.
Приведём решение Артёма Гридина на языке Python.:
print([True if len(set(y)) == 5 and any([y.count(y[0]) == 2 and y[0]*2>=sum([n for n in set(y) if n!=y[0]])/4,
y.count(y[1]) == 2 and y[1]*2>=sum([n for n in set(y) if n!=y[1]])/4,
y.count(y[2]) == 2 and y[2]*2>=sum([n for n in set(y) if n!=y[2]])/4,
y.count(y[3]) == 2 and y[3]*2>=sum([n for n in set(y) if n!=y[3]])/4,
y.count(y[4]) == 2 and y[4]*2>=sum([n for n in set(y) if n!=y[4]])/4,
y.count(y[5]) == 2 and y[5]*2>=sum([n for n in set(y) if n!=y[5]])/4,
]) else False for y in tuple(map(lambda x: sorted(tuple(map(int, x.split(';')))), open('9.csv').read().splitlines()))].count(True))
Примечание. Файл следует сохранить в формате csv.
Типичные ошибки
- Сравнение сделано строгим: условие «не больше» включает случай равенства, поэтому такие строки должны учитываться.
- Среднее неповторяющихся чисел делилось на неверное количество чисел — например, на число различных значений вместо числа неповторяющихся позиций.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №9 по информатике