我正在尝试将长度为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
答案 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]);
}