weranda
@weranda

Как определить суммы левой и правой частей больших чисел?

Приветствую

Столкнулся с простой задачей:

Из всех шестизначных чисел вывести те, чьи суммы левой и правой частей равны.

И написал решение:
for x in range(100000, 999999):
	x = str(x)
	left = [int(x[0]), int(x[1]), int(x[2])]
	right = [int(x[3]), int(x[4]), int(x[5])]
	if sum(left) == sum(right):
		print(x)

Как видите, решение этой задачи какое-то кривое. Как ее правильно решить?
  • Вопрос задан
  • 424 просмотра
Решения вопроса 2
AnnTHony
@AnnTHony
Интроверт
for i in range(100000, 1000000):
	x = [int(item) for item in str(i)]
	if (sum(x[:3]) == sum(x[3:])):
		print(i)
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
Как-то так можно оптимизировать
for x in xrange(100, 1000):
    left = x // 100 % 10 + x // 10 % 10 + x % 10
    for y in xrange(0, 1000):
        right = y // 100 % 10 + y // 10 % 10 + y % 10
        if left == right:
            print '%03d%03d' % (x, y)

Хотя и это не идеал, если разложить вообще на 6 циклов, полагаю, что будет быстрее работать, чем с делениями.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@abcd0x00
>>> import operator
>>> 
>>> def split3(x):
...     return (x // 100, x // 10 % 10, x % 10)
... 
>>> def split6(x):
...     return (x // 1000, x % 1000)
... 
>>> pred = lambda x: operator.eq(*map(sum, map(split3, split6(x))))
>>> 
>>> out = list(filter(pred, range(100000, 1000000)))
>>> out[:10]
[100001, 100010, 100100, 101002, 101011, 101020, 101101, 101110, 101200, 102003]
>>>
Ответ написан
Комментировать
@got686
from itertools import product
groups = {i: [] for i in range(1,28)}
for i in range (100, 1000):
    groups[i // 100 + i // 10 % 10 + i % 10].append[i]

results = []
for i in groups:
    results += [x*1000+y for x,y in product(groups[i], repeat=2)]
print(results)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы