Задача про детей, любящих только одну из 2х каш

petrukhinevg

Новичок
Пользователь
Дек 14, 2022
6
0
1
Приветы!
Начал проходить на Яндекс академии бесплатный курс программирования по Python.

Имеется текст задачи:

Формат ввода

В первых двух строках указывается количество детей, любящих манную и овсяную каши (N и M).
Затем идут N+M строк — перемешанные фамилии детей.
Гарантируется, что в группе нет однофамильцев.

Формат вывода

В алфавитном порядке фамилии учеников, которые любят только одну кашу.
Если таких не окажется, в строке вывода нужно написать «Таких нет».


Мучался долго над решением. первый вариант написал за пару минут, но он не проходит проверки при том, что похожие решения находил в интернете (используются операции с множествами, в данном случае - симметричная разность ^).
Просидев час переписал программу используя новый список m, формируемый из первого n (в m попадают только те элементы, количество которых в n = 1) Этот вариант прошел проверку.
И потом еще сидел час так и не поняв, какие проверки не прошла первая версия программы.

Может быть пропустил какие-то исключения или еще что-то? ума не приложу..

Некорректное решение (прошло 6 из 22х проверок)
Python:
x = int(input())
y = int(input())
n = []
m = []
i = 0
while i != x:
    n += input().split()
    i += 1
i = 0
while i != y:
    m += input().split()
    i += 1
print('Таких нет' if len(set(n) ^ set(m)) == 0 else len(set(n) ^ set(m)))


Корректное решение (Прошло все проверки)"
Python:
x = int(input())
y = int(input())
n = []
m = []
k = 0
while k != x:
    n += input().split()
    k += 1
k = 0
while k != y:
    n += input().split()
    k += 1
for i in range(len(n)):
    if n.count(n[i]) == 1:
        m.append(n[i])
s = sorted(m)
print('\n'.join(s) if len(m) > 0 else 'Таких нет')
 

falcar

Новичок
Пользователь
Дек 20, 2022
1
1
3
У вас 2 разные задачи. Одна на вывод количества, вторая на вывод имен. Но идея там одинаковая. У меня тоже не проходит дальше 6 проверки этот код (попытался максимально разложить на отдельные переменные):

Python:
num_m, num_o = int(input()), int(input())

name_m = ''
name_o = ''

for i in range(1, num_m + 1):
    name_m += f"{input()} "

for i in range(1, num_o + 1):
    name_o += f"{input()} "

name_m_set = set(name_m.split())
name_o_set = set(name_o.split())

name_all = name_m_set ^ name_o_set

if len(name_all) == 0:
    print('Таких нет')
else:
    print(len(name_all))

А вот этот проходит. Различий в результатах не замечаю.
Python:
num_m, num_o = int(input()), int(input())

name = []
name_m = []

for i in range(1, num_m + num_o + 1):
    name += input().split()

for i in range(len(name)):
    if name.count(name[i]) == 1:
        name_m.append(name[i])

print(len(name_m) if len(name_m) > 0 else 'Таких нет')
 
  • Мне нравится
Реакции: petrukhinevg

Форум IT Специалистов