Я не знаю где ошибка, правильный ответ 13633, а у меня 12824. Вроде на цифры число раскладывает правильно
"Счастливым назовём число, если у него сумма первых трёх цифр на единицу меньше суммы последних трёх цифр. Для интервала [222222;444444] найдите количество таких чисел." - задание.
import math
k=0
for i in range(222222,444445):
d=[]
f=0
for n in range (1,7):
f=i%(10**n)
while f>9:
f=math.floor(f/10)
d.append(f)
if (d[5]+d[4]+d[3])-(d[1]+d[2]+d[0])==1:
k+=1
print(k)
Ответы (4 шт):
Автор решения: passant
→ Ссылка
k=0
for i in range(222222,444445):
st=str(i)
delta=(int(st[3])+int(st[4])+int(st[5]))-(int(st[0])+int(st[1])+int(st[2]))
if delta==1:
k+=1
print(k)
Ответ:
13633
Автор решения: ganz
→ Ссылка
Улучшенная версия @passant
k=0
for i in range(222222,444445):
st=list(map(int,str(i))) # преобразуем число в список
#delta=(int(st[3])+int(st[4])+int(st[5]))-(int(st[0])+int(st[1])+int(st[2]))
delta=sum(st[3:])-sum(st[:3]) #вычисления
if delta==1:
k+=1
print(k)
Полагаю, данный вариант более удобочитаем в отношении вычислений.
Автор решения: MBo
→ Ссылка
Нет, на цифры раскладывает неверно.
Без строк:
import math
k=0
for i in range(222222,444445):
s = 0
t = i
for n in range(3):
s+= t%10
t//=10
for n in range(3):
s-= t%10
t//=10
if s==1:
k+=1
print(k)
Автор решения: SergFSM
→ Ссылка
не прибегая к строкам можно решить еще так (код только для шестизначных чисел):
f = lambda x: x//100 + x//10%10 + x%10
k = sum(f(i//1000)+1==f(i%1000) for i in range(222222,444445))
print(k) # 13633