Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > найти k-цифру последовательности фибоначи


Автор: missmilke 11.12.2009, 20:45
например 9 цифрой будет 2
я так полагаю надо записать эту последовательность в список строк и вытащить от туда по номеру необходимую цифру.Но как это сделать?

Автор: bems 11.12.2009, 21:02
9-й цифрой не будет 2

Код

function F(k: Integer): Integer;
begin
Assert(k > 0);
if k in [1, 2]
   then Result := 1
   else Result := F(k - 1) + F(k - 2)
end;


Это только для положительных k

Автор: bems 11.12.2009, 21:18
Есть еще http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%B0_%D0%A4%D0%B8%D0%B1%D0%BE%D0%BD%D0%B0%D1%87%D1%87%D0%B8#.D0.A4.D0.BE.D1.80.D0.BC.D1.83.D0.BB.D0.B0_.D0.91.D0.B8.D0.BD.D0.B5

Автор: Hinidu 13.12.2009, 19:03
Какие ограничения на k? Если маленькие, то можно просто сделать, если большие, то длинную арифметику нужно применять.

bems, здесь имеется ввиду 9ая цифра, а не 9й элемент последовательности Фибоначчи:
1,1,2,3,5,8,13,21
9ая цифра в этой последовательности 2

Автор: missmilke 14.12.2009, 14:59
k<=2000

Автор: Hinidu 15.12.2009, 00:52
При таких ограничениях тебе хватит первых 120 чисел. Наибольшие из них в int64 не влезут, но можно с длинной арифметикой их найти. Дать алгоритм? Или все-таки хочешь записать их как строки?
Если да, то вот алгоритм поиска k-ого символа в массиве строк:
Код

j:=1;
while k>length(s[j]) do
  begin
  dec(k,length(s[j]));
  inc(j);
  end;
write(s[j,k]);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)