关闭

历届试题 斐波那契

标签: 蓝桥杯Java
964人阅读 评论(5) 收藏 举报
分类:

问题描述
  斐波那契数列大家都非常熟悉。它的定义是:

  f(x) = 1 …. (x=1,2)
  f(x) = f(x-1) + f(x-2) …. (x>2)

  对于给定的整数 n 和 m,我们希望求出:
  f(1) + f(2) + … + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
  公式如下

  但这个数字依然很大,所以需要再对 p 求模。
输入格式
  输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18)
输出格式
  输出为1个整数,表示答案
样例输入
2 3 5
样例输出
0
样例输入
15 11 29
样例输出
25


代码如下:

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    static int MAX = Integer.MAX_VALUE;
    static ArrayList<BigInteger> f = new ArrayList<BigInteger>();
    static ArrayList<BigInteger> sum = new ArrayList<BigInteger>();

    public static BigInteger Factor(int i){
        BigInteger known;
        if ( i < f.size()){
            return f.get(i);
        }
        known = f.get(i-1).add(f.get(i-2));
        f.add(known);
        return known;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        f.add(BigInteger.ONE);
        f.add(BigInteger.ONE);
        sum.add(BigInteger.ONE);
        sum.add(new BigInteger("2"));
        int n = in.nextInt();
        int m = in.nextInt();
        BigInteger p = new BigInteger(in.next());
        int max = Math.max(n, m);
        int start = f.size();
        for ( int i = start ; i < max ; i++){
            BigInteger fab = Factor(i);
            BigInteger s = sum.get(i-1).add(fab);
            sum.add(s);
        }
        BigInteger result = sum.get(n-1).remainder(f.get(m-1));     
        result = result.remainder(p);
        System.out.print(result.toString());

        in.close();
    }
}
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

斐波那契 解题报告

历届试题 斐波那契   时间限制:1.0s   内存限制:256.0MB     问题描述   斐波那契数列大家都非常熟悉。它的定义是: f(x) = 1 .... (x=1,2)...
  • lixiaomu2
  • lixiaomu2
  • 2017-03-04 17:08
  • 212

第五届蓝桥杯软件类省赛真题 Java本科A 斐波那契

标题:斐波那契     斐波那契数列大家都非常熟悉。它的定义是:     f(x) = 1                    .... ...
  • LUKEAINI
  • LUKEAINI
  • 2014-11-05 21:28
  • 925

面试题整理-斐波那契数列

这个很好。其实也就是f(0) = 0, f(1) = 1. 然后 f(n) = f(n-1) +  f(n-2); 测试链接点击打开链接。求解: #include #include ...
  • JIEJINQUANIL
  • JIEJINQUANIL
  • 2016-09-02 22:52
  • 698

课程格子-斐波那契数列笔试题目-被拒原因?

本人2年Android,最近在看机会,投了课程格子,然后沟通后要先通过一道题目,在再决定安不安排面试. 题目是一个上机题目,但是其核心(个人认为)是斐波那契数列的问题. 题目如下: 要求: ...
  • biezhihua
  • biezhihua
  • 2016-10-15 14:40
  • 838

斐波那契 解题报告

历届试题 斐波那契   时间限制:1.0s   内存限制:256.0MB     问题描述   斐波那契数列大家都非常熟悉。它的定义是: f(x) = 1 .... (x=1,2)...
  • lixiaomu2
  • lixiaomu2
  • 2017-03-04 17:08
  • 212

数据结构:斐波那契查找原理解析

//原文来自:http://blog.chinaunix.net/uid-27164517-id-3313988.html #include #include #define MAXSIZE ...
  • s634772208
  • s634772208
  • 2015-05-08 23:03
  • 1844

斐波那契数-从爬楼梯问题说开去

正式讲一下斐波那契数: 首先我们知道有一个著名的算法面试题: 一共有n个台阶,你一次可以走一个台阶,或者两个台阶。那么,走到台阶顶时,一共有多少种走法。 比如三个台阶,你可以 1,2。。。或者1...
  • bairongdong1
  • bairongdong1
  • 2016-08-22 01:54
  • 766

递归解决斐波那契数列

1、什么是递归?   递归:递归是方法定义调用方法本身的现象。递归举例如下: public class DiGuiDemo { //递归方法举例 public void show() ...
  • fightfaith
  • fightfaith
  • 2015-11-24 13:05
  • 1727

斐波那契高效算法(4种算法综合分析)

斐波那契数列问题是算法学习者必然接触到的问题,作为经典问题,首次接触时一般是作为递归算法的案例教程。 然而递归解决斐波那契,其效率低的令人发指,有人算出其时间复杂度为O(2^n)。指数级时间复杂度。 ...
  • xygy8860
  • xygy8860
  • 2015-07-27 17:34
  • 7527

斐波那契数列 递推 递归 备忘录 动态规划

当n=0时,f(n) = 0      当n=1时,f(n) = 1 当n>1时,f(n) = f(n-1) + f(n-2) 递归算法: [cpp...
  • judyge
  • judyge
  • 2015-04-17 11:21
  • 998
    个人资料
    • 访问:138596次
    • 积分:4744
    • 等级:
    • 排名:第7079名
    • 原创:327篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论