Форум » Выполнение и анализ алгоритмов для исполнителей » Задача 6309 неправильный ответ » Ответить

Задача 6309 неправильный ответ

1llumi: Ответ на сайте: 135 Правильный ответ: 125 Строка: 022222111212122122211111212221222222212211112211112111212212121222121211211212121222112212122212212112211212111111121221112112111121122221122211121112211212121121112112112122221222221212221221112122121222221112122211121121122112122211121112122212111220

Ответов - 1

Ж: C вашей строкой на выходе получаем строку 021212112221212212121122112212212221112121111212212121212121121122111122112212122211221112212121121122221112111122212111112122121221121112112211112121211211222121111122122211221221112211121221211211122112212112222221222122122212112221222112222122111220 Сумма цифр этой строки 374 - состоит не только из четных цифр Есть способ решить это задание без программы: Заметим, что при выполнении операций: заменить (02, 101) - сумма цифр не меняется заменить (11, 2) - сумма цифр не меняется заменить (12, 21) - сумма цифр не меняется заменить (010, 00) - сумма цифр уменьшается на 1, причем 1 раз, т.к. после этой замены появляются 00 и программа завершается Исходная сумма цифр строки минимум 248/2*(1+2) = 372 372-1=371 - есть нечетные цифры значит. единиц было больше ближайшая сумма из четных цифр 402 402+1=403 - не делится на 3 405/3=135 Это оценка - меньше, чем 135 единиц быть не могло единицы быть не может, а пример с 63 единицами показан выше. А это код, который такой результат выдает [pre2] for n in range(125,150): s=list('1' * n + '2' * n ) shuffle(s) s='0'+''.join(s)+'0' s1=s while '00' not in s: s=s.replace('02','101',1) s=s.replace('11','2',1) s=s.replace('12','21',1) s=s.replace('010','00',1) ss=sum([int(c) for c in s ]) if all(d in '02468' for d in str(ss) ) : print(n,ss,s1) break [/pre2]



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