Форум » Логические выражения » Задания №15.238 и №15.239 » Ответить

Задания №15.238 и №15.239

vadimrakipov: Здравствуйте, Константин Юрьевич. Условия задач одно и тоже, кроме отрезок. Приведу решение 239 задачи кодом ( Python 3.9.0 ): тык -> скриншоты условия, решения и вывода кода [pre2] D = set([i for i in range(155,178)]) B = set([i for i in range(111,131)]) mn = 10**64 for x1 in range(300): for x2 in range(x1+1,300): A = set([i for i in range(x1,x2+1)]) f = 0 for x in range(300): if not ((x in D) <= (((not(x in B)) and (not(x in A))) <= (not(x in D)))): f = 1 break if not f: A = sorted(list(A)) if A[len(A) - 1] - A[0] < mn: cnt = A mn = A[len(A) - 1] - A[0] print(mn) print(cnt) [/pre2] Ответ получился 22, что совпадает с ответом на сайте: тык - > ответ Приведу решение 238 задачи кодом ( Python 3.9.0 ): тык -> скриншоты условия, решения и вывода кода [pre2] D = set([i for i in range(155,178)]) B = set([i for i in range(111,161)]) mn = 10**64 cnt = 0 for x1 in range(300): for x2 in range(x1+1,300): A = set([i for i in range(x1,x2+1)]) f = 0 for x in range(300): if not ((x in D) <= (((not(x in B)) and (not(x in A))) <= (not(x in D)))): f = 1 break if not f: A = sorted(list(A)) if A[len(A) - 1] - A[0] < mn: cnt = A mn = A[len(A) - 1] - A[0] print(mn) print(cnt) [/pre2] Ответ получился 16, что не совпадает с ответом на сайте: тык -> ответ Или же: Ответ 238 задачи верный, то есть 17, но код будет таким: [pre2] D = set([i for i in range(155,178)]) B = set([i for i in range(111,161)]) mn = 10**64 cnt = 0 for x1 in range(300): for x2 in range(x1+1,300): A = set([i for i in range(x1,x2+1)]) f = 0 for x in range(300): if not ((x in D) <= (((not(x in B)) and (not(x in A))) <= (not(x in D)))): f = 1 break if not f: if len(A) < mn: mn = len(A) print(mn) [/pre2] Тогда, получается, ответ 239 задачи неверный, не 22, а 23. 239 задача: [pre2] D = set([i for i in range(155,178)]) B = set([i for i in range(111,131)]) mn = 10**64 for x1 in range(300): for x2 in range(x1+1,300): A = set([i for i in range(x1,x2+1)]) f = 0 for x in range(300): if not ((x in D) <= (((not(x in B)) and (not(x in A))) <= (not(x in D)))): f = 1 break if not f: if len(A) < mn: mn = len(A) print(mn) [/pre2] Прошу помочь, заранее спасибо :D

Ответов - 1

Поляков: Здравствуйте! Решать задачи на отрезки с помощью программы и set - дело неблагодарное. Тут от программы больше проблем, чем пользы. Связано это с инверсиями. Некоторые размышления на эту тему и обсуждение возникающих проблем можно посмотреть здесь. А по сути разница в том, что в одном случае отрезки пересекаются, а во втором - нет. Упрощение выражения до формы B+A+not D позволяет просто и правильно решить задачу. Оба ответа верные.



полная версия страницы