蓝桥杯——BASIC04——Fibonacci数列

通过万岁!!!

  • 题目:求Fibonacci,这个序列我们应该比较熟,就是这个数等于前面两个数之和,这个一般学习递归的时候会学习到,但是题目还给了一个限定条件,就是对10007取余。
  • 思路,递归的方法时间复杂度很高的,所以我这里用三个变量的for循环。定义变量a,b,c其中c=a+b,然后其实a就没用了,这时候我们将b赋值给a,这样a就前进了,然后再把c赋值给b,一次类推即可。然后就是对10007取余了,要是都计算出来,应该会超出int或者long的长度。数学知识告诉我们,余数就是每个的余数相加,所以我们直接每次都对a和b关于10007取余即可。
  • 技巧:这里有点类似滑动窗口。
  • 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T4

java代码

import java.util.Scanner;


/**
* @创建人 xcs
* @创建日期 2022/3/11
* @创建时间 20:52
* 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T4
*/
public class BASIC04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        if (n <= 2) {
            System.out.println(1);
            return;
        }
        int a = 1, b = 1, c;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
            a %= 10007;
            b %= 10007;
        }
        System.out.println(b);
    }
}
  • 总结:这里就是不要用递归,一般递归好像计算50的时候就能感觉到很慢了。还有就是取余。

你可能感兴趣的:(算法,蓝桥杯,java,算法)