Форум » Обработка целых чисел » (№ 5249) (М. Шагитов) » Ответить

(№ 5249) (М. Шагитов)

Ar3turrr: Не выходит минимальное число, когда ответ по количеству пар правильный. [pre2]# проверяет на то, что все суммы пар составлены только из чисел тройки # и являются точными квадратами def F(a, b, c): check = True k = p = '' # вычисление всех чисел тройки for i in (str(a) + str(b) + str(c)): if i not in k: k += i # вычисление чисел, которых нет в тройке for i in '0123456789': if i not in k: p += i # проверка на то, что все суммы пар состоят из чисел тройки for g in k: if g in str(a) and g in str(b) and g in str(c): check = True else: check = False # проверка на то, что все суммы пар не состоят из чисел, которых нет в тройке for j in p: if j not in str(a) and j not in str(b) and j not in str(c): check = True else: check = False # проверка на точный квадрат if check and a ** 0.5 == int(a ** 0.5) and b ** 0.5 == int(b ** 0.5) and c ** 0.5 == int(c ** 0.5): return True with open('24-215.txt') as file: L = [ int(i) for i in file] l = [] count = 0 mincount = 10000000 # среднее арифметическое for i in range(len(L)): if L[ i] % 50 == 0: l.append(L[ i]) average = sum(l) // len(l) for i in range(0, len(L) - 2): m = min(L[ i] + L[ i + 1], L[ i] + L[ i + 2], L[ i + 1] + L[ i + 2]) if F(L[ i] + L[ i + 1], L[ i] + L[ i + 2], L[ i + 1] + L[ i + 2]) and m > average: count += 1 mincount = min(L[ i] + L[ i + 1], L[ i] + L[ i + 2], L[ i + 1] + L[ i + 2], mincount) print(count, mincount)[/pre2]

Ответов - 7

sgglazkov: Проанализируйте данный код. Ответ верный, ошибок нет. [pre2]def couple(x, y): s = x + y if s ** 0.5 == int(s ** 0.5): return True return False cnt = 0 mn = 10 ** 10 a = [int(c) for c in open('te.txt')] sr = [c for c in a if c % 50 == 0] sr = sum(sr) / len(sr) for i in range(len(a) - 2): if couple(a[ i ], a[i + 1]) and couple(a[ i ], a[i + 2]) and couple(a[i + 1], a[i + 2]): min_sum = min(a[ i ] + a[i + 1], a[ i ] + a[i + 2], a[i + 1] + a[i + 2]) if min_sum > sr: cnt += 1 mn = min(mn, a[ i ] + a[i + 1] + a[i + 2]) print(cnt, mn)[/pre2]

s11kai: sgglazkov пишет: a = [int(c) for c in open('te.txt')] Позвольте спросить, кто вам дал право менять имя авторского файла? У себя на компьютере вы можете его именовать как угодно, но при публикации на форуме, будьте добры соблюдать авторское право! Вот красивое решение от К.Ю. Полякова: [pre2] a = [int(x) for x in open("17-328.txt")] m = [ x for x in a if x % 2 != 0 ] M = sum(m) / len(m) def isOk( a ): return '7' not in f"{a:o}" def valid( x, y, z ): return isOk(x+y) and isOk(x+z) and isOk(y+z) and \ x + y + z < M count = ma = 0 for i in range(len(a)-2): s = sum( a[i:i+3] ) if valid( a[ i], a[i+1], a[i+2] ): count += 1 if s > ma: ma = s print( count, ma ) [/pre2]

Ж: [pre2] s=[int(c) for c in open('c:/17-328.txt')] m=[c for c in s if c%50==0]; sr=sum(m)/len(m) kv=[c**2 for c in range(500)] tr=[(s+s[i+1]+s[i+2]) for i in range(len(s)-2) if all(a+b in kv for (a,b) in combinations(s[i:i+3],2)) and min([a+b for (a,b) in combinations(s[i:i+3],2)])>sr] print(len(tr),min(tr)) [/pre2]


s11kai: Ж, с одной стороны, предложенный код лично мне интересен, хотя и не очень нравиться предпоследняя строка - очень уж она длинная. С другой стороны, если даже к опубликованному вами коду подключить библиотеку, в "целях ликбеза" по публикациям, from itertools import * Ж пишет: s=[int(c) for c in open('c:/17-328.txt')] m=[c for c in s if c%50==0]; sr=sum(m)/len(m) kv=[c**2 for c in range(500)] tr=[(s+s[i+1]+s[i+2]) for i in range(len(s)-2) if all(a+b in kv for (a,b) in combinations(s[i:i+3],2)) and min([a+b for (a,b) in combinations(s[i:i+3],2)])>sr] print(len(tr),min(tr)) То все равно выдаст ошибку: TypeError: can only concatenate list (not "int") to list

Ж: from itertools import * s=[int(c) for c in open('c:/17-328.txt')] m=[c for c in s if c%50==0]; sr=sum(m)/len(m) kv=[c**2 for c in range(500)] tr=[(s[ i]+s[i+1]+s[i+2]) for i in range(len(s)-2) if all(a+b in kv for (a,b) in combinations(s[i:i+3],2)) and min([a+b for (a,b) in combinations(s[i:i+3],2)])>sr] print(len(tr),min(tr))

s11kai: Ж пишет: s=[int(c) for c in open('c:/17-328.txt')] Крайняя придирка, мне кажется удобнее создать папку и там хранить коды и тексты, а не в корне системного диска

Ж: Окончательная версия [/pre] from itertools import * s=[int(c) for c in open('d:/1.txt')] sr = sum(c for c in s if c % 50 == 0) / len([c for c in s if c % 50 == 0]) usl=lambda a,b,c: all(c**0.5==int(c**0.5) and c>sr for c in [a+b,a+c,b+c]) l=[sum(s[i:i+3]) for i in range(len(s)-2) if usl(*s[i:i+3]) ] print(len(l),min(l)) [/pre2]



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