Автор | Сообщение |
|
Отправлено: 05.06.23 20:54. Заголовок: Задача 6416 неправильный ответ
Ответ на сайте: 70 Правильный: 63 Строка: 0222222122111222121112212121122221112212212122212212222222222112211222222222112112211122111112212211211211211211112111122112211211212222121212220
|
|
|
Ответов - 7
[только новые]
|
|
|
Отправлено: 11.06.23 16:21. Заголовок: Если не подбирать ра..
Если не подбирать расположение цифр в строке, а взять исходную строку s = '0' + '2' * 80 + '1' * n + '0', то получается сумма 223 при n=65.
|
|
|
|
Отправлено: 12.06.23 20:49. Заголовок: Заметим, что при вып..
Заметим, что при выполнении оперций: заменить (02, 101) - сумма цифр не меняется заменить (11, 2) - сумма цифр не меняется заменить (012, 30) - сумма цифр не меняется заменить (010, 00) - сумма цифр уменьшается на 1, причем 1 раз, т.к. после этой замены появляются 00 и программа завершается Исходная сумма цифр строки 2*80+1*60+еще чуток (единиц больше 60) - итого сумма была >=220 220 не простое 221 не простое 222 - не простое 223 - ПРОСТОЕ!! --> единиц не меньше 63 Это оценка - меньше, чем 63 единицы быть не может, а пример с 63 единицами показан выше.
|
|
|
|
| Администратор
|
Сообщение: 4028
|
|
Отправлено: 15.06.23 15:13. Заголовок: Спасибо, ответ и реш..
Спасибо, ответ и решение исправлены.
|
|
|
|
Отправлено: 20.12.23 21:37. Заголовок: Добрый день! Верный ..
Добрый день! Верный ответ на самом деле 64!!! Если обращаться к сообщению от 12.06.23 можно заметить ошибку в рассуждениях. А конкретно: В условии задания нас просят указать ИСХОДНОЕ количество единиц. Сумма цифр числа, которая в конце окажется простым числом - 223. Данное число мы получаем после того, как вычтем из 224 единицу. Таким образом сумма двоек в исходном числе составляет 160, а сумма единиц 64 соответственно. Спасибо!
|
|
|
|
Отправлено: 29.12.23 16:26. Заголовок: Не думаю, что я ошиб..
Не думаю, что я ошиблась в ответе. ( а рассуждения я немного поправила) Исходная сумма цифр строки 2*80+1*60+еще чуток (единиц больше 60) - итого сумма была >=220. Первое простое число после 220 включительно - 223 --> единиц было не менее 63 (2*80+63=223) Вот код, который при исходной строке с 63 единицами, удовлетворяющей условию задачи, выдает в конце строку сумма цифр которой равна 223 s='0222222122111222121112212121122221112212212122212212222222222112211222222222112112211122111112212211211211211211112111122112211211212222121212220' print(s.count('1')) print(s.count('2')) print(s.count('0')) while '00' not in s: s=s.replace('02','101',1) s = s.replace('11', '2', 1) s = s.replace('012', '30', 1) s = s.replace('010', '00', 1) print(sum(int(c) for c in s))
|
|
|
|
Отправлено: 27.03.24 17:09. Заголовок: К вопросу о числе единиц: 63 или 64
Процитирую сначала участника с ником Ж: "Заметим, что при выполнении операций: заменить (02, 101) - сумма цифр не меняется заменить (11, 2) - сумма цифр не меняется заменить (012, 30) - сумма цифр не меняется заменить (010, 00) - сумма цифр уменьшается на 1, причем 1 раз, т.к. после этой замены появляются 00 и программа завершается" Но тогда возникает резонный вопрос: раз сумма цифр исходной строки уменьшается на 1, то в ней должно быть не 63, а 64 единицы? Подвох здесь в том, что завершающая комбинации из двух нулей может получиться (и на самом деле получается для строки, предложенной в качестве решения) после замены 012 на 30, так как 30 плюс последний 0 даст 300 и алгоритм завершится без вычитания единицы! Для проверки моего предположения я написал программу для строки из сообщения 1llumi, отключив в программе последнюю замену. Программа вывела сумму цифр строки-результата 223. Так что правильный ответ 63, только как его получить?
|
|
|
|
Отправлено: 28.03.24 10:21. Заголовок: Согласна с Подвох з..
Согласна с цитата: | Подвох здесь в том, что завершающая комбинации из двух нулей может получиться (и на самом деле получается для строки, предложенной в качестве решения) после замены 012 на 30, так как 30 плюс последний 0 даст 300 и алгоритм завершится без вычитания единицы! |
| В конце строки как раз и стоит двойка (я не заметила этот момент). Пример подходящей строки и код остаются те же. s = '0222222122111222121112212121122221112212212122212212222222222112211222222222112112211122111112212211211211211211112111122112211211212222121212220' print(s.count('1')) print(s.count('2')) print(s.count('0')) while '00' not in s: s = s.replace('02', '101', 1) s = s.replace('11', '2', 1) s = s.replace('012', '30', 1) # s = s.replace('010', '00', 1) print(sum(int(c) for c in s))
|
|
|
|