在斐波那契系列中分开2位数字

时间:2018-03-15 14:39:17

标签: java

我正在尝试将长度为2位的斐波纳契序列分开,但第一位数字给出的是零

    int[] fib = new int[input];
    int[] fib2 = new int[input];

    fib[0] = 0;
    fib[1] = 1;
    fib2[0] = 0;
    fib2[1] = 1;

for (int i = 2; i < input; i++) {               
            fib[i] = fib[i - 1] + fib[i - 2];  // first fibonnaci sequence to output
            fib2[i] = fib2[i - 1] + fib2[i - 2];  // second fibonnaci sequence to output
            fib[i] = separate(fib[i]);  //get the second digit of the fibonacci sequence
            fib2[i] = separate2(fib2[i]);//get the first digit of the fibonacci sequence but it output zero's
}

 public static int separate(int x) {
    //int result = x;
    x = x % 10;
    return x;
}

public static int separate2(int y) {
    //int result = x;
    y = y / 10;
    return y;
}

正常的斐波那契序列是 1,1,2,3,5,8,13,21,34,55,89 输出应为1,1,2,3,5,8,1,3,2,1,3,4,5,5,8,9

2 个答案:

答案 0 :(得分:0)

首先,使用未正确初始化的数组生成列表。 (在编辑中更正。)

fib2[0] = 0; //first digit is 1 ... not 0 by the way
fib2[1] = 1;

第二个问题是您更改了fib[i]的值,但需要计算下一个值,因此您需要先生成完整列表或使用不同的列表。

但是,当然,为什么生成两次列表,一个就足够了,你可以使用不同的值来存储结果(而不是删除以前的值,需要生成下一个值°。

使用三个数组:

int[] fib = new int[input];
int[] fibDigit1 = new int[input];
int[] fibDigit2 = new int[input];

for (int i = 2; i < input; i++) {               
    fib[i] = fib[i - 1] + fib[i - 2];  // first fibonnaci sequence to output

    fibDigit1 = separate(fib[i]);
    fibDigit2 = separate2(fib2[i]);
}

答案 1 :(得分:0)

尝试使用正常序列填充数组,然后尝试获取单个数字

for (int i = 2; i < input; i++)
{
    fib[i] = fib[i - 1] + fib[i - 2];
    fib2[i] = fib2[i - 1] + fib2[i - 2];
}

for (int i = 2; i < input; i++)
{
    fib[i] = separate(fib[i]);
    fib2[i] = separate2(fib2[i]);
}

或者通过一些操作,只需要计算一个序列来启动

for (int i = 2; i < input; i++)
    fib[i] = fib[i - 1] + fib[i - 2];

for (int i = 2; i < input; i++)
{
    fib2[i] = separate2(fib[i]);
    fib[i] = separate(fib[i]);
}