簡體   English   中英

斐波那契數列中的單獨2位數字

[英]separate 2 digit numbers in fibonacci series

我正在嘗試分離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

首先,您使用未正確初始化的數組生成列表。 (已在編輯中更正。)

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]);
}

嘗試試圖獲得個位數之前填充正常序列的陣列

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]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM