Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python легкая задача, ошибка 8 задание ЕГЭ

Глубокая Глотка Ученик (115), открыт 2 недели назад
Короче мой код:

from itertools import product
a = 0
for i in (product("СВЕТЛАНА", repeat=8)):
if i.count('С') == 1 and i.count('В') == 1 and i.count('Е') == 1 and i.count('Т') == 1 and i.count('Л') == 1 and i.count('А') == 2 and i.count('Н') == 1 and i[0] != i[1] and i[1] != i[2] and i[2] != i[3] and i[3] != i[4] and i[4] != i[5] and i[5] != i[6] and i[6] != i[7]:
a = a + 1
print(a)


Мой код выводит неправильное значение, которое в 4 р больше правильного ответа

ID задачи: 40724

Условие: Светлана составляет коды из букв своего имени. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться столько же раз, сколько в имени Светлана. Кроме того, одинаковые буквы в коде не должны стоять рядом. Сколько кодов может составить Светлана?
3 ответа
Jurijus Zaksas Искусственный Интеллект (458583) 2 недели назад
Это вопрос на комбинаторику, есть формула распределения.
У тебя есть СВЕТЛАН - всего 7! перестановок.
И еще на каждую из них можно в 8-и разных местах всобачить А.
Ответ должен быть 40320.
Jurijus ZaksasИскусственный Интеллект (458583) 2 недели назад
Извиняюсь, в 6-и местах, если не 2 подряд. Тогда 30240.
Рустам Абдрашитов Мудрец (14307) 2 недели назад
В вашем коде есть несколько проблем:

1. Основная ошибка в том, что вы проверяете, чтобы рядом стоящие буквы были разные, но не учитываете, что буква 'А' встречается 2 раза, и они тоже не должны стоять рядом.

2. Проверка количества букв избыточна - можно использовать только нужные буквы сразу.

Вот исправленный код:

```python
from itertools import permutations

word = "СВЕТЛАНА"
# Используем permutations вместо product, так как нам нужны все перестановки
# конкретного набора букв
a = 0
for i in set(permutations(word)): # set уберет дубликаты
# Проверяем только условие, что рядом стоящие буквы разные
if i[0] != i[1] and i[1] != i[2] and i[2] != i[3] and i[3] != i[4] and i[4] != i[5] and i[5] != i[6] and i[6] != i[7]:
a += 1
print(a)
```

Ключевые изменения:
1. Используем `permutations` вместо `product`, так как нам нужны перестановки конкретного набора букв
2. Используем `set` для удаления дубликатов
3. Убрали проверку количества букв, так как permutations уже дает нам правильное количество каждой буквы
4. Проверяем только условие, что рядом стоящие буквы разные

Этот код даст правильный ответ. В исходном коде использование product давало все возможные комбинации из 8 букв, включая неправильные варианты с неверным количеством букв, а затем проверяло их количество. Это приводило к избыточным вычислениям и неверному результату.
Похожие вопросы