Сегодня я пошел на математическое соревнование, и возник вопрос, который был примерно таким:
У вас есть номер
n
, теперь вам нужно рассчитать, какой самый короткий маршрут для этого числа, но есть правила.
- Вы начинаете с номера
1
- Вы заканчиваете, когда вы достигаете
n
- Вы можете перейти на
n
либо удвоить свой предыдущий номер, либо добавить два предыдущих номера.Пример:
n = 25
Самый медленный маршрут:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
(Вы просто добавляете1
)Самый быстрый маршрут:
1,2,4,8,16,24,25
, сложность = 6Пример:
n = 8
Самый быстрый маршрут:1,2,4,8
, сложность = 3Пример:
n = 15
Самый быстрый маршрут:1,2,3,6,9,15
, сложность = 5
Как создать программу, которая может рассчитать сложность заданного числа n
(с помощью n <= 32
)?
Я уже знаю, что для любого заданного числа n (n <= 32) сложность ниже, чем 1.45 x 2log (n). Поэтому теперь мне нужно всего вычислить все маршруты со сложностью ниже 1,45 x 2log (n), а сравнить их и посмотреть, какой из них является самым быстрым "маршрутом". Но я понятия не имею, как поместить все маршруты и все это в python, потому что количество маршрутов изменяется, когда число n изменяется.
Это то, что у меня есть сейчас:
number = raw_input('Enter your number here : ')
startnumber = 1
complexity = 0
while startnumber <= number