Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2018 12:25:35

carin
Зарегистрирован: 2018-09-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Обсчет загадки

Решал таку загадку: Расставьте все десять цифр 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

И нифига она не правильно считает. На некоторые числа же с остатками делится. Как так получилось?!
Спасибо.

Офлайн

#2 Сен. 1, 2018 23:22:12

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Обсчет загадки

Вроде бы все верно… Какие числа делятся с остатком?

 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)

Офлайн

#3 Сен. 2, 2018 02:57:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Обсчет загадки

  
>>> 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
>>> 



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version