Next Fibonacci Number(下一个斐波拉契数列)

简介: Write a program that takes input of integer N, followed by N more integers. For each integer, output the next fibonacci number after it.

Write a program that takes input of integer N, followed by N more integers.

For each integer, output the next fibonacci number after it.

Fibonacci number: Any number that belongs to the fibonacci series.

Constraints:

Your program should run correctly for the first 69 Fibonacci numbers.

Your output lines should not have any trailing or leading whitespace.


Input
3
1
9
22


Output
2
13
34


 

Explanation: 2 is the next fibonacci number greater than 1, the fibonacci number that comes after 9 is 13. 34 is the next fibonacci number after 22.

英文描述

英文描述请参考下面的图。

中文描述

根据给定的值,返回这个值后面的下一个斐波拉契数列中的下一个数。

在斐波拉契数列中存储 60 个 斐波拉契数。

例如,给定整数 1,那么应该返回的结果是 2 。因为给定整数 1 后面的下一个斐波拉契数是 2。

如果给定的数值是 9 的话,那么下一个斐波拉契数应该是 13。

斐波拉契数列又译为菲波拿契数列、菲波那西数列、斐波那契数列、黄金分割数列。

用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出。首几个费波那契系数是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的数列A000045)

思路和点评

首先计算斐波拉契数列,然后将数值存储到数组中。

定义一个数组,在这个数组中先存储 60 个从小到大的斐波拉契数。

然后将给定的数值与数值中存储的斐波拉契数进行对比,这个时候你需要对数组中的斐波拉契数进行遍历。当找到大于当前给定的整数以后,可以 Break 这次比对并且返回(输出)这个值。

源代码

源代码和有关代码的更新请访问 GitHub:

https://github.com/cwiki-us/codebank-algorithm/blob/master/src/main/java/com/ossez/codebank/interview/ManNextFibonacciNumber.java

运行建议:

这个方法因为测试平台的问题,我们没有写到测试类中。我们是直接定义了一个可以运行的类。

你可以在你的 Eclipse 平台上,直接运行这个类。

在你运行类以后的 Console 控制台窗口,你首先需要输入数字 3 ,这个数字 3 表示这次运行你需要进行 3 次测试。

然后输入测试数字,例如,你可以输入测试数字 1,那么,程序将会输出 1 Next Fibonacci [2]。

这个与实际题目要求的有所差异,你需要进行调整,而且题目是需要使用 System.out.println 输出的,请注意我们在我们的源程序中注释掉了这个输出。

代码思路请参考:


package com.ossez.codebank.interview;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * https://www.cwiki.us/display/ITCLASSIFICATION/Next+Fibonacci+Number
 *
 * @author YuCheng
 *
 */
public class ManNextFibonacciNumber {
    private final static Logger logger = LoggerFactory.getLogger(ManNextFibonacciNumber.class);

    public static void main(String[] args) throws java.lang.Exception {
        int fArray[] = new int[60];

        for (int i = 0; i < 60; i++) {
            fArray[i] = getFib(i);
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        // System.out.println(fib(Integer.valueOf(input)));

        for (int i = 0; i < Integer.valueOf(input); i++) {
            Integer inputInt = Integer.valueOf(br.readLine());
            // System.out.println(inputInt);
            for (int j = 0; j < fArray.length; j++) {
                if (fArray[j] > inputInt) {
                    // System.out.println(fArray[j]);
                    logger.debug("{} Next Fibonacci [{}]", inputInt, fArray[j]);
                    break;
                }
            }

        }

    }

    /**
     * Get Fibonacci Number
     *
     * @param n
     * @return
     */
    private static int getFib(int n) {
        if (n < 0) {
            return -1;
        } else if (n == 0) {
            return 0;
        } else if (n == 1 || n == 2) {
            return 1;
        } else {
            int[] fibAry = new int[n + 1];
            fibAry[0] = 0;
            fibAry[1] = fibAry[2] = 1;
            for (int i = 3; i <= n; i++) {
                fibAry[i] = fibAry[i - 1] + fibAry[i - 2];
            }
            return fibAry[n];
        }
    }
}


 

测试结果

上面程序的测试结果如下:



3
1
2019/02/07 20:59:25 DEBUG [com.ossez.codebank.interview.ManNextFibonacciNumber] - 1 Next Fibonacci [2]
9
2019/02/07 20:59:46 DEBUG [com.ossez.codebank.interview.ManNextFibonacciNumber] - 9 Next Fibonacci [13]
22
2019/02/07 20:59:49 DEBUG [com.ossez.codebank.interview.ManNextFibonacciNumber] - 22 Next Fibonacci [34]



https://www.cwiki.us/display/ITCLASSIFICATION/Next+Fibonacci+Number

目录
相关文章
|
8月前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
60 0
|
Python
求四百万以内Fibonacci(number)数列偶数结果的总和
又对啦。。。开心~~~~ 只是代码可能不符合PEP标准什么的。。。 Each new term in the Fibonacci sequence is generated by adding the previous two terms.
758 0
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
107 1
|
7月前
|
存储 SQL 算法
LeetCode 题目 65:有效数字(Valid Number)【python】
LeetCode 题目 65:有效数字(Valid Number)【python】
|
存储
Leetcode Single Number II (面试题推荐)
给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。
42 0
|
算法
LeetCode 414. Third Maximum Number
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
99 0
LeetCode 414. Third Maximum Number
|
存储
LeetCode 313. Super Ugly Number
编写一段程序来查找第 n 个超级丑数。 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。
107 0
LeetCode 313. Super Ugly Number
|
算法
LeetCode 306. Additive Number
累加数是一个字符串,组成它的数字可以形成累加序列。 一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。 给定一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是累加数。 说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。
132 0
LeetCode 306. Additive Number
|
算法
LeetCode 268. Missing Number
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
95 0
LeetCode 268. Missing Number