算法笔记1——蓝桥杯-入门训练 Fibonacci数列

1.问题

问题描述

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式

输入包含一个整数n。

输出格式

输出一行,包含一个整数,表示Fn除以10007的余数。

说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

样例输入

10

样例输出

55

样例输入

22

样例输出

7704

数据规模与约定

1 <= n <= 1,000,000。

2.思路与求解过程

开始思路是递归,输入较小的数可以执行,一旦较大数就一直会循环,以下是错误的递归方法:

import java.util.Scanner;

public class Main1 {
  public static long fibonacci(long n){
    if(n==1||n==2){
      return 1;
    }else{
      return fibonacci(n-1)+fibonacci(n-2);
    }
  }
  public static void main(String[] args) {
    long time1 = System.currentTimeMillis();
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    System.out.println("n:"+n);
    if(n<=1000000&&n>=1){
      System.out.println("n===="+n);
      long num = fibonacci(n);

      System.out.println("num:"+num);

      System.out.println(( fibonacci(n)%10007));
     }else{
      System.out.println("超出范围了!");
    }
    long time2 = System.currentTimeMillis();
    System.out.println("时间:"+(time2-time1));
  }

}

在参考他人的代码后,发现不用递归更简单,直接用数组就很简单

public static void main(String[] args) {
  long time1 = System.currentTimeMillis();
  Scanner scanner = new Scanner(System.in);
  int n = scanner.nextInt();
  System.out.println("n:"+n);
  int[] arr = new int[10000001];
  arr[1] =arr[2]=1;
  for(int i=3;i<=n;i++){
    arr[i] = (arr[i-1]+arr[i-2])%10007;
  }
  System.out.println(arr[n]);
  long time2 = System.currentTimeMillis();
  System.out.println("时间:"+(time2-time1));
}

时间: 2024-10-12 20:13:16

算法笔记1——蓝桥杯-入门训练 Fibonacci数列的相关文章

蓝桥杯 入门训练 Fibonacci数列(Java)

@Author : qingdujun 入门训练 Fibonacci数列  : http://lx.lanqiao.org/problem.page?gpid=T4 import java.util.Scanner; /** * 蓝桥杯: 入门训练 Fibonacci数列 * @author qingdujun * */ public class Main { public static void main(String[] args) { int f1 = 1; int f2 = 1; int

蓝桥杯入门训练——Fibonacci数列

果然是好长时间没有刷题,脑袋都秀逗了.所以说刷题是日常必需品,不能断啊, 因为蓝桥杯还有一个月左右时间,所以又开始了我的刷题道路,但是自从到了4208之后就没太怎么刷题了,也就是说有一个学期没有刷题了. 真的是有些简单的题在很多简单的地方又错了. 从现在开始要经常刷题,摆在你面前的就是刷刷刷!!! 蓝桥网练习系统入门训练 就没有让我省心. 难道是智商又退了吗. 这道题我硬是交了四五遍啊!!! 第一遍 超时  直接计算出了f(n)然后再求的模10007, 原来是我把题目想的太简单了! #inclu

蓝桥杯 入门训练 Fibonacci数列

问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 55 样例输

蓝桥杯入门训练-Fibonacci数列

刚刚开始刷题的时候就栽了个大跟头,稍微记一下...... 一开始不是很理解:"我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单"这句话. 写完代码测试后才发现 当Fn 很大的时候,会超出int的表示范围, 后来才想明白为什么要这么做 1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[]

蓝桥java 入门训练 Fibonacci数列

import java.util.Scanner; public class Main{ public static void main(String[] args) { int maxn=1000000+5; int mod=10007; int[] Fibonacci=new int[maxn]; Fibonacci[1]=1; Fibonacci[2]=1; Scanner sc=new Scanner(System.in); int n=sc.nextInt(); for(int i=3

【蓝桥杯】入门训练 Fibonacci数列

入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余

入门训练 Fibonacci数列 (水题)

入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余

蓝桥杯-入门训练 :Fibonacci数列

问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 55 样例输入

算法笔记_076:蓝桥杯练习 结点选择(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n . 接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值. 接下来一共 n-1 行,每行描述树上的一条边. 输出格式 输出一个整数,代表选出的点的权值和的最大值. 样例输入 51 2 3 4 51 21 32 42 5 样例输出 12 样例说明