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

задача 17 (5210)

AnnaPershina: (№ 5210) (М. Шагитов) В файле 17-316.txt содержится последовательность целых чисел. Элементы последовательности - четырёхзначные натуральные числа. Назовём два различных четырёхзначных числа хорошей парой, если их среднее арифметическое (полусумма) и среднее геометрическое (квадратный корень из произведения) — натуральные числа. Найдите все тройки элементов последовательности, в которых есть хотя бы одна хорошая пара, а сумма всех чисел тройки меньше максимальной суммы двух различных элементов последовательности. В ответе запишите количество найденных троек, затем минимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности. [pre2] a=[int(x) for x in open("17-316.txt")] b=[] c=sorted(a) s=c[-1]+c[-2] for i in range(1, len(a) - 1): if ((a[ i]+a[i-1]+a[i+1])<s ) and ((((a[ i]+a[i-1])%2==0) and(a[ i]!=a[i-1] ) and ((int(a[ i]*a[i-1])**0.5)**2)==a[ i]*a[i-1]) or (((a[ i]+a[i+1])%2==0) and(a [ i]!=a[i+1] ) and ((int(a[ i]*a[i+1])**0.5)**2)==a[ i]*a[i+1]) or (((a[i-1]+a[i+1])%2==0) and(a[i+1]!=a[i-1] ) and ((int(a[i+1]*a[i-1])**0.5)**2)==a[i+1]*a[i-1])): b.append(a[ i]+a[i-1]+a[i+1]) print(len(b),min(b)) [/pre2] подскажите,пожалуйста, где ошибка в коде. Ответ: 3151 3850 Мой ответ программы:6397 3148

Ответов - 2

Поляков: AnnaPershina пишет: почему-то на форуме в тексте программы не печатает а[и] . В программе есть Это потому, что вы не читаете то, что написано вверху на желтом фоне.

Ж: Добрый день! Назовём два различных четырёхзначных числа хорошей парой, если их среднее арифметическое (полусумма) и среднее геометрическое (квадратный корень из произведения) — натуральные числа. Если в коде убрать проверку условия a!=b, программа выдает верный ответ 3151 3850. Но ведь это условие должно быть проверено, тогда ответ 3146 3850 [pre2] f=open('d:/1.txt') s=[int(c) for c in f] maxi=sum(sorted(set(s))[-2::]) usl=lambda a,b: (a+b)/2==int((a+b)/2) and (a*b)**0.5==int((a*b)**0.5) l=[sum(s[i:i+3]) for i in range(len(s)-2) if (usl(s,s[i+1]) or usl(s,s[i+2]) or usl(s[i+1],s[i+2])) and sum(s[i:i+3])<maxi ] print(len(l),min(l)) [/pre2]



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