πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №9 → Задание i09-06

Задание №9 ЕГЭ Информатика с ответом и решением

Ответ: 2241

Условие

Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел.

Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:

— в строке только одно число повторяется ровно два раза, остальные числа различны;

— среднее арифметическое неповторяющихся чисел строки не больше суммы повторяющихся чисел.

В ответе запишите только число.

Подсказки — как подойти к решению

  1. Сначала отфильтруй строки по структуре чисел: различных значений в строке должно быть ровно на одно меньше, чем самих чисел, и одно значение встречается дважды.
  2. Сумма повторяющихся чисел получается как сумма всех чисел строки минус сумма различных значений; тогда сумма неповторяющихся — это сумма различных минус найденная сумма повторяющихся.
  3. Среднее неповторяющихся считается по числу неповторяющихся позиций, а условие «не больше» допускает равенство, поэтому сравнение делай нестрогим; пометь строки единицами и нулями, сложи пометки, а данные удобно обработать программой, сохранив таблицу как 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 по информатике