Форум сайта python.su
0
Решал таку загадку: Расставьте все десять цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 в таком порядке, чтобы получившееся число делилось на все числа от 2 до 18.
Как она решается правильно, я знаю.
Написал следующий код для перебора:
from itertools import permutations
minimal = 2
maximal = 18
def check(dig, n):
if n < maximal+1:
if dig % n == 0:
n = n + 1
check(dig, n)
else:
if n == maximal+1:
print(str(dig)+ “ делится без остатка на все числа от ” + str(minimal) + “ до ” + str(maximal))
for item in permutations('1234567890', 10):
dig=int(''.join(item))
check(dig, minimal)
получаю
2438195760 делится без остатка на все числа от 2 до 18
3785942160 делится без остатка на все числа от 2 до 18
4753869120 делится без остатка на все числа от 2 до 18
4876391520 делится без остатка на все числа от 2 до 18
И нифига она не правильно считает. На некоторые числа же с остатками делится. Как так получилось?!
Спасибо.
Офлайн
76
Вроде бы все верно… Какие числа делятся с остатком?
from itertools import permutations from decimal import Decimal minimal = 2 maximal = 18 def check(dig, n): if n < maximal+1: if dig % n == 0: n += 1 check(dig, n) else: print(str(dig)+ "делится без остатка на все числа от" + str(minimal) + "до" + str(maximal)) for x in range(2, 19): print('деление на {} = {}'.format(x, Decimal(dig)/Decimal(x))) for item in permutations('1234567890', 10): dig=int(''.join(item)) check(Decimal(dig), Decimal(minimal))
Отредактировано Romissevd (Сен. 1, 2018 23:24:00)
Офлайн
857
>>> def check(number, divmin, divmax): ... for i in range(divmin, divmax + 1): ... if number % i != 0: ... return False ... return True ... >>> for i in (2438195760, 3785942160, 4753869120, 4876391520): ... print(i, check(i, 2, 18)) ... 2438195760 True 3785942160 True 4753869120 True 4876391520 True >>>
Офлайн