Простая задачка ....
Года 90-лохматого с задачки на Олимпиаде по программированию (тогда на 8-битных «калькуляторах»).
Всем фибонастам понравится ;)
1. есть ряд «аля фибо» 0-1-1-2-3-5-8 ....
2. продолжаем ряд сложением предыдущих 2х чисел для получения нового.
3. все получаемые числа дописываем в ряд 0112358 и тд.
Задача (собственно):
Какое число (символ, цифра) будет 2011м в этом ряду ;)
Это как бы и к роботостроительству (на предмет построения алгоритма вычисления).
Хотя вероятность числа 0 около 50% при таком формате записи в строку, т.к. каждое число начиная с 75го оканчивается на 0, и количество нулей в строке с увеличением ряда будет только расти.
участник всероссийской олимпиады школьников по программированию 1993г г.Троицк
и че я до сих пор руками торгую)))?
Ну что там, рассчиталось? ))
склеить ряд по условиям в одну строку, а затем назвать символ #2011 в склеенном ряду
а я ряды фибоначчи не знаю)
или знал, но забыл. решал как обычно с извращенной логикой)
Но как это решить просто по формуле я не понял
ждем автора, пусть рассудит)
а я в экселе и считал. там формат ему на ячейку числовой задаешь и все путем.
а вот перевести из числа в текст и длину символов взять, тут на 20ти знаках эксель обламал, пришлось некоторую длину чисел руками добавить для поиска 2011 номера.
ексель 1304969544928660 75ое число
о, точно косяк екселя))
тогда мой ответ неправильный)))
претензию надо биллу гейтсу писать)
У меня лично ответа нет, потому что лень алгоритм писать. Просто вчера вдруг вспомнилось (было несколько разговоров, которые параллельно сцеплялись в небольшой части, что случайно выстрелилось воспоминаниями).
Собственно, в то время (а это была олимпиада по информатике) необходимо было не только запрограммировать, но и на бумаге расписать алгоритм. А программить пришлось на БК-001 ;) Кто помнит — это 8-битная архитектура.
Задачка, как 2 пальца об асфальт, однако самое сложное и тем именно интересное:
Именно как числовой ряд — загнать в 8-битную не выйдет.
В тот раз, насколько помню, дабы не тратить времени на разработку какого-то «научного алгоритма» просто циклами отсекал часть получаемого ряда, оставляя только хвост.
Для примера:
2011 символов — это 201 блок по 10 символов + 1 символ (как раз наш искомый).
Значит просто при добавлении в ряд очередного числа, смотрим на длину ряда оставшегося после усечения, отсекаем по 10 символов в мусорку, оставляя «хвост», и добавляя каждый раз к счетчику +1 (+1 блок из 10 символов).
Примерно так.
Хотя, если поразмыслить, то и в Экселе можно настрогать быстро. Просто для отображения ВСЕГО ряда, нужно его из числового формата превратить в текстовый ;) И, соответственно, вновь получаемое число фибо конвертировать в текст и прикреплять к основному ряду ;) А уж 2011-й символ в текстовом массиве найти просто ;)
— Комментарии только сейчас прочитал, но сразу же не понял про «13й знак в числе 30960598847965100000000000000 и будет 2011 в ряду записи.», «Ответ 2. Это 9-ая цифра в числе 3807901929474030000000000000000» и подобные комментарии.
— Если честно, просто в Юмор топик явно не засунуть, потому в основном пришлось сделать. Даже не ожидал, что интересно будет ;)
А вот интересен не сам 2011й символ, а алгоритм/алгоритмы. Соответственно, наиболее короткий в виде кода ;)
Просто вчера было «короткое замыкание», которое разомкнул сюда ))))))))))
Настряпал длиннющий комментарий и опаньки… свет рубанулся во всем здании, а UPS как сетевой фильтр давно уже :(
В общем в Экселе заняло примерно 2 минуты. 4 столбца, 138 строк тупого копирования строк ;)
Но это только для того, чтобы найти 6 или 9 как ответ. Хотя икак алгоритм с переводом числа в текст в иных языках — тоже сойдёт на быструю руку ;)
Всё сверхпросто:
;)
Вот с этим на БК-001 ещё раньше можно было столкнуться (не на 75м числе), потому побыстрому просто отсекал часть цифр, уменьшая сам ряд, если очередное число «вываливалось» за возможности машины.
Точно уже и не вспомню сейчас, но на досуге могу попытать ум ;)
— А «Зина» была привязана к «не расстраивайся» (чего у меня и в мыслях не было) ;)
Об этом я выше и писал. И не только эксельку так можно обмануть.