简单斐波那契——计蒜客(4)

题目来自“计蒜客”第4题。

解算法题之前,务必先写出与之对应的数学表达式,用于描述算法。

数学描述如图:

根据“数学描述“,写出代码如下:

#include <stdio.h>

int main()
{
    int N =0 ;
    scanf("%d", &N);
    int i, fn1 = 1, fn2 = 0, fn;
    switch(N)
    {
        case 0:
            printf("0");
            break;
        case 1:
            printf("1");
            break;
        default:
            for(i = 2; i <= N; i++ )
            {
                fn = fn1 + fn2;
                fn2 = fn1;
                fn1 = fn;
            }
            printf("%d", fn);
    }
    return 0;
}

愉快的完毕。

反思,该算法的时间复杂度为O(N),即算法的执行时间取决于数列的项数。如果能推到出“第N项斐波那契数公式“,直接带入公式,那么时间复杂度将进化到O(1)。

时间: 2024-08-02 02:48:37

简单斐波那契——计蒜客(4)的相关文章

第3题:判断质数&amp;第4题:简单斐波那契

第3题:判断质数 对于大于1的数,如果除了1和它本身,它不能再被其它正整数整除,那么我们说它是一个质数.晓萌想判断一个数是不是质数,希望找你写个程序,帮助她进行判断. 输入包括一行,为一个整数N(1 < N ≤1000),正是晓萌给出你让你判断的数字.<n≤1000).< style="box-sizing: border-box;"> 输出包括一行,如果晓萌给出的整数N为质数,那么输出YES:如果N不是质数,那么输出NO. 样例输入 3 样例输出 YES 答案

51nod1031(简单斐波拉契数列)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1031 题意:中文题诶- 思路:对于第x块骨牌的情况,我们用a[x]表示其方法数:其比x-1块骨牌时多了一块骨牌,多出的骨牌有两种放法: 1.我们可以直接将其竖着添加在最末端,那么其排列数就为就是前x-1块骨牌的排列数,即为a[x-1]: 2. 我们也可以将其和其前面一块骨牌一起横着放,那么其排列数就是前x-2块骨牌的排列数,即为a[x-2]: 所以有 a[x

剑指offer(10)—— 斐波那契数列以及跳台阶问题

总结 2^(n-1)可以用位移操作进行: 1<< (n-1) 如果递归不好思考的话,可以找规律,代码很简单 斐波那契数列(10) 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 public class Solution { public int Fibonacci(int n) { // 先判断n必须在范围内取值 if(n > 39 && n <= 0) return 0; // 为1直接返

计蒜客之斐波那契数列

斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加.用数学公式定义斐波那契数列则可以看成如下形式: F0=0 F1=1 Fn=Fn-1+Fn-2 我们约定 Fn 表示斐波那契数列的第 n 项,你能知道斐波那契数列中的任何一项吗? 输入包括一行,包括一个数字N(0≤N≤50). 输出包括一行,包括一个数字,为斐波那契数列的第N项的值. 样例输入 7 样例输出 13 C++实现代码如下: #include <iostream> using namespa

斐波那契数列的实现(简单递归和动态规划)

斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 1 #include "stdafx.h" 2 #include <string> 3 using namespace std; 4 int f(int n) 5 { 6 if (n == 0) 7 { 8 return 0; 9 } 10 if (n == 1) 11 { 12 return 1; 13 } 14 return f(n - 1) + f(n - 2); 15 } 16 int _tmain(in

简单东西-斐波那契函数实现

CSDN首页的极客头条里看到一个问题,实现斐波那契函数,并且计算n等于100时的函数值.简单地想了下,所能想到的就是使用递归完成.用递归实现,测试发现递归效率非常低,尤其是当计算的N稍微大点时,计算N=100差不多耗费了3000秒.而且需要考虑长度问题,返回值不能用int,溢出的临界是N=50. 无意中逛CSDN的问答频道,恰好也看到一个斐波那契函数的问题,而且不是用递归而是用临时中间变量存储每次计算得到的中间值,测试发现这比递归快多了,计算N=100,瞬间出结果. 三种实现方法如下: publ

求:简单又困难的 “斐波那契数列”代码

下面给出上篇博客的代码解释具体的我也在注释里面写清楚了. 至于矩阵构造嘛..还是要看个人悟性(也有运气),显然这个我还是不行的,这个矩阵初始化我复制的. 1 #include <cstdio> 2 #include <cstring> 3 const int M = 1E9 + 7; 4 struct Matrix { 5 long long a[2][2]; 6 Matrix() { memset(a, 0, sizeof(a)); } //构造矩阵 7 //定义矩阵乘法 8 M

java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)

为什么说 “算法是程序的灵魂这句话一点也不为过”,请看下面这个简单的案例 1 package recursion; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import org.junit.Test; 7 8 /** 9 * @author: MengXianman 10 * @creationTime: 2017年11月27日 上午9:47:51 11 * @description: 斐波那契数列结合备忘录算法的简单使

UVA12470—Tribonacci (类似斐波那契,简单题)

题目链接:https://vjudge.net/problem/UVA-12470 题目意思:我们都知道斐波那契数列F[i]=F[i-1]+F[i-2],现在我们要算这样的一个式子T[i]=T[i-1]+T[i-2]+T[i-3]的第n想是多少,很套路的矩阵快速幂,入门题,算是熟悉矩阵快速幂的操作吧. 代码: 1 //Author: xiaowuga 2 #include<bits/stdc++.h> 3 #define maxx INT_MAX 4 #define minn INT_MIN