我的问题与数字的斐波那契数列有关(但为了简单起见,你可以将它应用于方形/素数等事物)
long f1 = 0;
long f2 = 1;
long fibonacci = 0;
long[] fibonaccinumbers = new long[52];
fibonaccinumbers[0]=0;
fibonaccinumbers[1]=1;
for(int count = 2; count<=51; count++)
{
fibonacci = f2+f1;
fibonaccinumbers[count] = fibonacci;
f1 = f2;
f2 = fibonacci;
}
上面的代码为fibonacci数字0-51生成数组。
现在我要做的就是输入一个数字,我们以30为例。然后查找并显示序列中前后的数字,即21和34。
让我沮丧的是进入阵列并在我的给定号码上方和下方搜索以找到匹配。我怎么能这样做?
答案 0 :(得分:2)
由于Fibonaccy系列是一个排序数组(具有升序),您可以使用int index = Arrays.binarySearch(fibonaccinumbers,30);
来获取fibonaccinumbers[index-1] < 30 < fibonaccinumbers[index]
的索引。
因此fibonaccinumbers[index-1]
将包含21,fibonaccinumbers[index]
将包含34。
请注意,如果数组中的所有数字都小于您要搜索的数字,Arrays.binarySearch
将返回fibonaccinumbers.length
。
答案 1 :(得分:0)
这应该非常简单,您只需要在输入的索引的+1和-1处访问数组,例如,如果用户输入30 ...
System.out.println("BEFORE: " + fibonaccinumbers[input-1]);
System.out.println("AFTER: " + fibonaccinumbers[input+1]);
如果输入是用户输入的内容,那么输入-1将为29。
请务必确保输入-1和输入+ 1不会超出阵列的范围。
如果你想知道实际的fibonnaci数是多少而不是序列中的数字,你需要首先搜索一下,然后再使用你找到的索引,找到之前和之后的内容。
答案 2 :(得分:0)
如果你不想使用Arrays
类提供的二进制搜索,那么你可以简单地遍历数组并检查所需的值。您只需要一个int
值来指示数组中的索引。
public static void main(String[] args) {
long[] fibs = createFib();
long search = 30;
int small = 0;
for(long i : fibs) {
if(i < search) {
++small;
} else {
break;
}
}
if(small < fibs.length)
System.out.println(fibs[small-1] + " and " + fibs[small] + " do surround the value " + search);
else {
System.out.println(" the value " + search +" is to high, only " + fibs[small-1] + " is in range");
}
}
private static long[] createFib() {
long f1 = 0;
long f2 = 1;
long fibonacci = 0;
long[] fibonaccinumbers = new long[52];
fibonaccinumbers[0]=0;
fibonaccinumbers[1]=1;
for(int count = 2; count<=51; count++)
{
fibonacci = f2+f1;
fibonaccinumbers[count] = fibonacci;
f1 = f2;
f2 = fibonacci;
}
return fibonaccinumbers;
}