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

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

Ar_: Найдите все тройки элементов последовательности, для которых восьмеричная запись суммы любой пары чисел тройки содержит только чётные цифры, а сумма всех чисел тройки меньше, чем сумма цифр всех чисел в файле, делящихся на 22. Правильное минимальное значение, но неверное кол-во. f = open('17.txt') def d(x): s = [] v = oct(x)[2:] for i in range(len(v)): if int(v[i]) % 2 ==0: s.append(v[i]) if len(s) == len(v): return 1 else: return 0 m, mx = 0, 5555656 s = [int(k.strip()) for k in f.readlines()] l = [] for i in range(len(s)): if s[i] % 22 == 0: l.append(s[i]) for i in range(len(s)-2): if ((d(s[i] + s[i+1]) == 1) or (d(s[i] + s[i+2]) == 1) or (d(s[i+1] + s[i+2]) == 1)) and ( (s[i] + s[i+1] + s[i+2]) < sum(l)): m += 1 mx = min(mx, s[i] + s[i+1] + s[i+2]) print(m, mx, len(s))

Ответов - 4 новых

s11kai: Ar_ пишет: Заголовок: (№ 5251) (М. Шагитов) Ваш код сложно понять, если желаете получить подсказку или иное, уважайте тех, кто пожелает это сделать, для чего достаточно правильно отформатировать свой код при публикации! Как это сделать, подробно написано вверху страницы в выделенном прямоугольнике

zan_dan: f=open("172.txt") a=[int(x) for x in f] sm22=0 kl=0 mn=999999999 for x in a: if x%22==0: while x>0: sm22+=x%10 x=x//10 for x in range(len(a)-2): y1=(oct(a[x]+a[x+1])[2:]) y2=(oct(a[x+2]+a[x+1])[2:]) y3=(oct(a[x]+a[x+2])[2:]) if (y1.count("1")==0 and y1.count("3")==0 and y1.count("5")==0 and y1.count("7")==0) and (y2.count("1")==0 and y2.count("3")==0 and y2.count("5")==0 and y2.count("7")==0) and (y3.count("1")==0 and y3.count("3")==0 and y3.count("5")==0 and y3.count("7")==0) and (a[x]+a[x+1]+a[x+2])<sm22: kl+=1 mn=min(a[x]+a[x+1]+a[x+2],mn) print(kl,mn)

Поляков: Поищите эту задачу здесь, а авторское решение - здесь.


Ж: [pre2] f=open('c:/17-328.txt') s=[int(c) for c in f.readlines()] w=sum([sum(int(d) for d in str(c)) for c in s if c%22==0]) def g(s): return sum(s)<w and all( e not in oct(a+b)[2::] for (a,b) in [(s[0],s[1]),(s[0],s[2]),(s[1],s[2])] for e in '1357') tr=[sum(s[ i:i+3]) for i in range(len(s)-2) if g(s[i:i+3]) ] print(len(tr), min(tr)) [/pre2]



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