Форум » Обработка целых чисел » задание 17 номер 349 » Ответить

задание 17 номер 349

Агаркова: Здравствуйте. Задача на маски вызвала у меня затруднение, если начало строки совпадает с искомым символом внутри строки. В задаче 349 маска 83*8*. Количество совпадений с маской 6, а должно быть 3 по ответам. Я вывела все найденные маски и увидела, что удовлетворяют условию только 3. Как это предусмотреть в программе подскажите, пожалуйста. Я пробовала использовать дополнительное условие p1.index('8')!=0 в ветвлении, но тогда результат программы вообще 0. Вот мой код программы на Питоне. def f(n): b=n pr=1 while b>0: pr*=(b%10) b=b//10 return pr a=[int(x) for x in open ('17-346.txt')] i=0 k=0 max=0 while i<len(a)-2: p=f(a)*f(a[i+1])*f(a[i+2]) p1=str(p) if p<2_000_000_000 and (p1.startswith('83')) and ('8' in p1): k+=1 if p>max: max=p print (p) i+=1 print (k, max)

Ответов - 1

MrAndrewson: Программы "заворачивайте" в тэг [ pre2]...[ /pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Маску неверно проверяете. (p1.startswith('83') and ('8' in p1) будет истиной, например. для числа 83, а оно не удовлетворяет маске. p1.index('8')!=0 тоже плохо, поскольку такие числа все-таки начинаются с 8. Предлагаю проверять, что в строке цифр 8 больше, чем одна. [pre2] def f(n): b=n pr=1 while b>0: pr*=(b%10) b=b//10 return pr a=[int(x) for x in open ('17-346.txt')] i=0 k=0 max=0 while i < len(a)-2: p=f(a[ i])*f(a[ i+1])*f(a[ i+2]) p1=str(p) if p < 2_000_000_000 and (p1.startswith('83')) and ('8' in p1) and p1.count('8') > 1: k+=1 if p>max: max=p print(p) i+=1 print(k, max) [/pre2]



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