Форум » Кодирование и декодирование информации » к задаче 8 - 302 М. Байрамгулова опубликовано ложное решение и ответ » Ответить

к задаче 8 - 302 М. Байрамгулова опубликовано ложное решение и ответ

s11kai: Здравствуйте, Константин Юрьевич! Посмотрите пожалуйста, к задаче ege 8 №302, (М. Байрамгулов) Миша составляет 5-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно переставить буквы и получить палиндром. Сколько различных слов может составить Миша? Опубликовано следующее решение: [pre2] from itertools import product count = 0 for n in set(product( 'КОМПЬЮТЕР', repeat=5 )): setN = set(n) freq = [ n.count(c) for c in setN ] if sum( 1 for f in freq if f % 2 == 1) == 1: count += 1 print( count ) Дающее ответ 8649, и в ответах указан он же! Не может ли быть здесь ошибки? Ниже публикую 3 способа решения данной задачи и все они дают ответ 729 Вариант №1 from itertools import product k = set() for x in product('КОМПЬЮТЕР', repeat=6): s = ''.join(x) if s == s[::-1]: # если слово читается слева и справа одинаково k.add(s) # запоминаем его с учетом отсутствия совпадений print('Вариант решения №1', len(k)) Вариант №2 print('Вариант решения №2 k =',9*9*9) Вариант №3 from itertools import product k=set() for n in set(product( 'КОМПЬЮТЕР', repeat=5 )): if n[0]==n[4] and n[1]==n[3]: k.add(n) print('Вариант решения №3',len(k) ) [/pre2] С уважением

Ответов - 3

Поляков: Александр Иванович, Вы учитываете только палиндромы, а в условии говорится про все слова, из которых МОЖНО ПОЛУЧИТЬ ПАЛИНДРОМ перестановкой букв. Это ведь не одно и то же. Например, aabb - не палиндром, но перестановкой можно получить палиндром.

s11kai: Поляков пишет: Например, aabb - не палиндром, но перестановкой можно получить палиндром. Да уж, и правда, век живи - век учись! Остается только надеяться, что сдающим ЕГЭ таких мудрёных заданий не попадется! Спасибо!

s11kai: Для начинающих программировать на питоне, в знак оправдания за свою невнимательность, с высоты своего 47 летнего педстажа, могу дать совет. Увидев непонятный код - не отчаивайтесь, любую, даже самую страшную на первый взгляд программу, можно разложить по полочкам простым рассуждением. В конкретном примере это может выглядеть примерно так: • количество всех палиндромов 9*9*9 = 729 • всего разных букв 9, это означает, что есть ровно 9 палиндромов состоящих из одной буквы, т.е. 9 пятибуквенных слов, например, ККККК, ООООО, МММММ… • количество трехбуквенных палиндромов равно 729 – 9 = 720 • из трех символов ПАЛИНРОМА можно составить – КОМ, КМО, КММ, КОО => 4*3 = 12 слов • Итого слов будет: 720 * 12 + 9 = 8649 • Или в однострочном коде это будет выглядеть как-то так: print((9 * 9 * 9 – 9) * 12 + 9) А кто пожелает, можно посмотреть другой код, доступный для понимания, на ветке "Комбинаторика задание 8", предложенный Гошей Ищенко




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