Серия Фибоначчи в Октаве - PullRequest
       28

Серия Фибоначчи в Октаве

0 голосов
/ 22 февраля 2020

Мне нужно запустить серию Фибоначчи через функцию в Octave.

Я получил ожидаемый результат, но мой тестовый пример не прошел из-за отклонения в выходных данных.

 function fibo(n)
 a=0;
 b=1;
 x(:,1)=[1];
 for i=2:n
   c=a+b;
   x(:,i)=[c];
   a=b;
   b=c;
 endfor
 g=sprintf("%d   ",x);
 fprintf("Fibonacci sequence:   %s\n",g)
 endfunction    

 a = input("");
 fibo(a)

, если Input = 10, Output: (Тестовый случай не пройден)

enter image description here

При использовании

g=sprintf("\t%d",x);

отображается следующий вывод:

enter image description here

Может ли кто-нибудь помочь мне пройти тестовый сценарий путем разрешения отступов!

1 Ответ

2 голосов
/ 22 февраля 2020

Поскольку изображение ожидаемого вывода не может быть выделено, я не могу быть уверен на 100%, но похоже, что каждое число имеет фиксированную ширину 4 символа.

Следовательно, как я вижу вывод:

Fibonacci sequence: ---1 ---1 ---2 ---3 ---5 ---8 --13 --21 --34 --55

, где - здесь указывает заполненные пробелы.

Чтобы сделать это изменение, ваши строки печати должны измениться примерно так:

g=sprintf(" %4d", x);
fprintf("Fibonacci sequence: %s\n", g)

В сторону: функция должна предварительно выделить память для x для лучшего управления памятью. В MATLAB это было бы что-то вроде:

a=0;
b=1;
x = zeros(1, n); % This reserves memory for n numbers
x(:,1)=[1];
... % your code below

Кроме того, поскольку x спроектирован как одномерный массив, вероятно, было бы проще просто использовать

x(i) = c

вместо чего-то вроде

x(:,i) = [c]

...