Дано целое число n (> 2 сформировать и вывести целочисленный массив размера n, содержащий n первых элементов последовательности чисел фибоначчи fk: f1 = 1, f2 = 1, fk = fk−2 + fk−1, k = 3, 4, . .
// PascalABC.NET 3.3, сборка 1547 от 07.10.2017 // Внимание! Если программа не работает, обновите версию!
procedure Fib(var a,b:integer); begin (a,b):=(b,a+b) end;
begin; var (n,p,q):=(ReadInteger('n='),1,1); var a:=ArrFill(n,1); for var i:=3 to n do begin Fib(p,q); a[i-1]:=q end; a.Println end.
Пример n= 13 1 1 2 3 5 8 13 21 34 55 89 144 233
manager-3
19.08.2021
1. У файлі зберігається блок інформації. 2. Від програми в якому він створюється, редагується, зберігається.ї 3. Дозволяється використовувати до 255 символів.Дозволяється використовувати символи національних алфавітів, зокрема російського.Дозволяється використовувати пробіли та інші раніше заборонені символи, за винятком наступних дев'яти: / \ :*?"|.В імені файлу можна використовувати кілька точок. Розширенням імені вважаються всі символи, які стоять за останньою крапкою. 4. Для зручності і сортування.
krutikovas
19.08.2021
Наивный алгоритм: используя два вложенных цикла, проверить все подстроки, являются ли они палиндромами. Такой алгоритм будет работать O(|S|^2), что при ограничении |S| <= 10^5 потребует примерно 10^10 / 2 сравнений, что достаточно долго.
Оптимизация: в центре у палиндрома четной длины всегда пара одинаковых символов. Их можно найти, а затем увеличивать длину до тех пор, пока это возможно. Плюс этого наблюдения в том, что если пара попадется не в центре, то максимальная длина подстроки-палиндрома с центром в этой паре, будет ограничена сверху. Однако в худшем случае (все символы одинаковы) всё равно придется произвести немалое число сравнений.
Однако задачу можно решить и за линейное время. Например, существует алгоритм Манакера, основанный на том, что можно использовать информацию, что часть строки является палиндромом. А именно, если в длинную-длинную строку-палиндром входит другая подстрока-палиндром, то можно не начинать проверку заново, а использовать уже имеющуюся информацию.
Пример 1: "длинная" подстрока-палиндром: cbbaabbaabbc в которой известна подстрока-палиндром. Тогда в строке есть симметричная подстрока-палиндром: cbbaabbaabbc Пример 2: "длинная" подстрока палиндром: bbaabbaabbaa Зная, что в ней есть подстрока-палиндром bbaabbaabbaa, можно явные сравнения для подстроки с центром в bbaabbaabbaa начинать уже с bbaabbaabbaa
Если не хочется писать самостоятельно, алгоритм Манакера легко находится.
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Дано целое число n (> 2 сформировать и вывести целочисленный массив размера n, содержащий n первых элементов последовательности чисел фибоначчи fk: f1 = 1, f2 = 1, fk = fk−2 + fk−1, k = 3, 4, . .
// Внимание! Если программа не работает, обновите версию!
procedure Fib(var a,b:integer);
begin
(a,b):=(b,a+b)
end;
begin;
var (n,p,q):=(ReadInteger('n='),1,1);
var a:=ArrFill(n,1);
for var i:=3 to n do begin Fib(p,q); a[i-1]:=q end;
a.Println
end.
Пример
n= 13
1 1 2 3 5 8 13 21 34 55 89 144 233