剑指Offer - 九度1387 - 斐波那契数列
2013-11-24 03:08
题目描述:

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70)。

输出:

对应每个测试案例,

输出第n项斐波那契数列的值。

样例输入:
3
样例输出:
2
题意分析:
  斐波那契数列的定义:
    f[1] = 1, f[2] = 1
    f[n] = f[n - 1] + f[n - 2], n >= 3
  数学推导上,可以用特征根方程求出x^2 = x + 1的俩根 x = (1 土 sqrt(5)) / 2,编程的话你当然不会这么无聊去惹出一对无理数来。
  方法一,从f[1]、f[2]开始逐个计算f[3]到f[n],求出f[n]。时间复杂度O(n),空间复杂度O(1)。
  方法二,用矩阵来计算。
    将[f[n + 1], f[n]]作为一个列向量v[n],从v[n - 1] = [f[n - 1], f[n - 2]]到v[n]要经过一次线性变换T(v),T对应的矩阵A就是我们要构造的(当然是对应于自然基的)。
    设A = [a, b; c, d], v[n] = A * v[n - 1],显然(a, b, c, d)的解不唯一,就构造个最简单的就行了:[a, b, c, d] = [1, 1, 1, 0]。
    v[n] = A^(n - 1) * v[1],于是问题就转化成了矩阵的快速幂。时间复杂度O(log(n)),递归求解空间复杂度O(log(n))。
  数据范围小的话,用方法一就行,一般int和long long数据范围也只能支持几十个Fibonacci数。要计算大数的话,高精度算法配合方法二的O(log(n))效率肯定是免不了的。
下面是O(n)简单算法,数据量才70就不大材小用了,Over engineered是个坏习惯。
 // 651776    zhuli19901106    1387    Accepted    点击此处查看所有case的执行结果    1020KB    456B    0MS
//
#include <cstdio>
using namespace std; int main()
{
int n, i;
long long int f1, f2, f3; while(scanf("%d", &n) == ){
if(n == ){
printf("0\n");
continue;
}
if(n == ){
printf("1\n");
continue;
}
f1 = ;
f2 = ;
for(i = ; i < n; ++i){
f3 = f1 + f2;
f1 = f2;
f2 = f3;
} printf("%lld\n", f3);
} return ;
}

剑指Offer - 九度1387 - 斐波那契数列的更多相关文章

  1. 剑指offer第二版-10.斐波那契数列

    面试题10:斐波那契数列 题目要求: 求斐波那契数列的第n项的值.f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) n>1 思路:使用循环从下往上计算数列. 考点:考察对递归 ...

  2. 剑指offer【07】- 斐波那契数列(java)

    题目:斐波那契数列 考点:递归和循环 题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),n<=39. 法一:递归法,不过递归比较慢, ...

  3. 剑指offer(7)斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 题目分析 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这 ...

  4. 【剑指offer】9、斐波拉契数列

    面试题9.斐波拉契数列 题目: 输入整数n,求斐波拉契数列第n个数. 思路: 一.递归式算法: 利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下: 代码: long long ...

  5. 【剑指Offer】7、斐波那契数列

      题目描述:   大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).假设n<=39.   解题思路:   斐波那契数列:0,1,1,2,3, ...

  6. 【剑指offer】7:斐波那契数列

    题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1).假设 n≤39 解题思路: 斐波拉契数列:1,1,2,3,5,8--,总结 ...

  7. 剑指offer笔记面试题10----斐波那契数列

    题目:求斐波那契数列的第n项.写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下:f(0) = 0, f(1) = 1,f(n) = f(n - 1) + f(n - 2). 测试用例 ...

  8. 剑指offer——矩阵覆盖(斐波那契变形)

    ****感觉都可以针对斐波那契写一个变形题目的集合了****** 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? cl ...

  9. 剑指Offer - 九度1388 - 跳台阶

    剑指Offer - 九度1388 - 跳台阶2013-11-24 03:43 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包 ...

随机推荐

  1. org.springframework.beans.MethodInvocationException: Property 'cacheManager' threw exception; nested exception is org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: Caches cannot be

    shiro cache manage配置报错: org.springframework.beans.MethodInvocationException: Property 'cacheManager' ...

  2. 解决Jenkins的错误“The Server rejected the connection: None of the protocols were accepted”

    1. 配置节点,配置好节点后,在节点机上运行已下载文件,双击执行,提示"The Server rejected the connection: None of the protocols w ...

  3. Android_ListView适配器

    ListView如何优化 复用convertView缓存(减少ListView绘制). 自定义静态类ViewHolder(减少findViewById次数),通过setTag().getTag()获取 ...

  4. 模拟插队,出队,POJ(2259)

    题目链接:http://poj.org/problem?id=2259 水题一个,就是要记录一下每个队列是否有人bool[i], #include <iostream> #include ...

  5. DOM节点(二):操作节点

    appendChild() 用于向childNodes列表的末尾添加一个节点. var returnedNode = someNode.appendChild(newNode); 如果传入的节点已经是 ...

  6. eclipse使用maven install 命令,生成war包中没有jsp/js/css的解决方法

    在pom.xml文件中添加如下11行代码就可以了. <build> <plugins> <plugin> <groupId>org.apache.mav ...

  7. Rich feature hierarchies for accurate object detection and semantic segmentation(RCNN)

    https://zhuanlan.zhihu.com/p/23006190?refer=xiaoleimlnote http://blog.csdn.net/bea_tree/article/deta ...

  8. Spring整合JUnit spring静态对象属性的注入

    package cn.itcast.d_junit4; import org.junit.Test; import org.junit.runner.RunWith; import org.sprin ...

  9. Junit 测试 @Test 红名问题

    准备测试,如上图,都是红名 Ctrl+1 或者鼠标放在@Test上 鼠标放在@Test上出现上面这种就可直接点击安装了 如果是下边这种 Test is not an annotation type,一 ...

  10. Onboard,迷人的引导页样式制作库

    简介 Onboard主要用于引导页制作,源码写的相当规范,值得参考. 项目主页: https://github.com/mamaral/Onboard 实例下载: https://github.com ...