Форум » Обработка целых чисел » 5804 » Ответить

5804

nuriatalgatovna: Неправильная формулировка условия задачи в номере 5804. В качестве ответа укажите количество таких троек и "наибольшее произведение их цифр", а в ответе автор приводит наибольшее произведение четных цифр троек. Если требуется найти произведение цифр троек, программа должна вывести ответ: 37 455196672000 from fnmatch import * a = [int(x) for x in open('17-346.txt').readlines()] b = [] for i in range(2,len(a)): a1,a2,a3 = a[i-2],a[i-1],a s = str(a1)+str(a2)+str(a3) pch,pv = 1,1 for c in s: if c in '02468': pch*=int(c) pv*=int(c) if fnmatch(str(pch),'11*6*') and pch<=2*10**9: b+=[pv] print(len(b),max(b))

Ответов - 4

sgglazkov: Все верно в условии. Вот рабочая программа: [pre2]def digits(x): s = str(x) result = 1 for d in s: if int(d) % 2 == 0: result *= int(d) return result cnt = 0 mx = 0 a = [int(c) for c in open('te.txt')] for i in range(len(a) - 2): multi = str(digits(a) * digits(a[i + 1]) * digits(a[i + 2])) if multi[:2:] == '11' and '6' in multi and int(multi) <= 2 * 10 ** 9: cnt += 1 mx = max(int(multi), mx) print(cnt, mx) [/pre2]

s11kai: sgglazkov пишет: Вот рабочая программа: [pre2] def digits(x): s = str(x) result = 1 for d in s: if int(d) % 2 == 0: result *= int(d) return result cnt = 0 mx = 0 a = [int(c) for c in open('te.txt')] for i in range(len(a) - 2): multi = str(digits(a) * digits(a[i + 1]) * digits(a[i + 2])) if multi[:2:] == '11' and '6' in multi and int(multi) <= 2 * 10 ** 9: cnt += 1 mx = max(int(multi), mx) print(cnt, mx) [/pre2] Увы и ах, не работает она правильно, поскольку есть ошибки! Во-первых, изменено имя загружаемого файла! Во-вторых, ошибка в данной строке кода: multi = str(digits(a) * digits(a[i + 1]) * digits(a[i + 2]))

s11kai: Внимательно посмотрите на ранее опубликованный программный код: sgglazkov пишет: multi = str(digits(a) * digits(a[i + 1]) * digits(a[i + 2])) Благодарностей не жду, но совет на будущее даю: Если у вас используется сочетание "[ i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом. multi = str(digits(a[ i] * digits(a[i + 1]) * digits(a[i + 2]))


s11kai: nuriatalgatovna пишет: {pre2] a = [int(x) for x in open('17-346.txt').readlines()] b = [] for i in range(2,len(a)): a1,a2,a3 = a[i-2],a[i-1],a s = str(a1)+str(a2)+str(a3) pch,pv = 1,1 for c in s: if c in '02468': pch*=int(c) pv*=int(c) if fnmatch(str(pch),'11*6*') and pch<=2*10**9: b+=[pv] print(len(b),max(b)) [/pre2] Ваш код трудно понять, поскольку отсутствует форматирование. Программы "заворачивайте" в тэг '['pre2']'...'['/pre2']', пример указан в самом верху странички, при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[ i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.



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