Автор | Сообщение |
|
Отправлено: 01.04.21 20:06. Заголовок: ege15 №105
Здравствуйте, Константин Юрьевич. Подскажите пожалуйста, в чем ошибка, у меня получается 26, а в ответе 25 P = set(range(44, 49+1)) Q = set range(28, 53+1)) A = set() for x in range(28,53+1): if (((x in A) <= (x in P)) or (x in Q)) == False: A.add(x) print(A) print(len([x for x in A]))
|
|
|
Ответов - 3
[только новые]
|
|
|
Отправлено: 01.04.21 21:41. Заголовок: Ответ
Здравствуйте, s11kai! В ДАННОМ случае len([x for x in A]) определяет не длину отрезка А, а количество точек с целочисленными координатами на этом отрезке. Длина отрезка будет на 1 меньше. Замечание: if (((x in A) <= (x in P)) or (x in Q)) == True:
|
|
|
|
| Администратор
|
Сообщение: 2652
|
|
Отправлено: 01.04.21 21:50. Заголовок: s11kai пишет: в чем..
s11kai пишет: цитата: | в чем ошибка, у меня получается 26, а в ответе 25 |
|
Здравствуйте! Я бы не рекомендовал использовать такой подход при решении задач на отрезки. Причину точно указал Сергей Сергеевич выше. Чтобы формально получить правильный результат, можно провести масштабирование: K = 100 P = set(range(44*K, 49*K+1)) Q = set(range(28*K, 53*K+1)) U = set(range(100*K)) A = U.copy() for x in U: if (((x in A) <= (x in P)) or (x in Q)) == False: A.remove(x) # print(A) print( len([x for x in A])/K ) Программа выведет ответ 25,01.
|
|
|
|
Отправлено: 01.04.21 22:25. Заголовок: Спасибо за подробный..
Понятно, что конкретную задачу вручную решить проще, но хочется иметь программный вариант для проверки, а опыт работы с питоном отсутствует, поэтому спасибо и за анализ ошибки и за формальный способ ее программного устранения.
|
|
|
|