首页 > 试题广场 >

牛牛学数列5

[编程题]牛牛学数列5
  • 热度指数:10506 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}牛牛开始学习数列啦。现定义斐波那契数列,其前两项为 F_1=1, F_2=1,对于 n\geqq3,有:

\displaystyle F_n = F_{n-1} + F_{n-2}

\hspace{15pt}请计算并输出第 nF_n 的值。

输入描述:
\hspace{15pt}在一行中输入一个整数 n,满足 1 \leqq n \leqq 46


输出描述:
\hspace{15pt}输出一个整数,表示斐波那契数列的第 nF_n
示例1

输入

2

输出

1
示例2

输入

6

输出

8

说明

数列前几项为 1,1,2,3,5,8,因此 F_6=8
n = int(input())
if n == 1 or n == 2:
    print(1)
else:
    a = 1
    b = 1
    for i in range(3, n+ 1):  
        c = a + b
        a = b
        b = c
    print(c)  
发表于 2025-09-23 15:48:34 回复(0)
x=int(input())
a=1
b=1
for i in range(1,x-1):
    if i%2==0:b+=a
    else:a+=b
print(max(a,b))

发表于 2025-09-22 19:24:38 回复(1)
a = int(input())
result = []
for i in range(1,a+1):
    if i ==1 :
        result.append(1)
        continue
    if i ==2:
        result.append(1)
        continue
    sum = result[-1] + result[-2]
    result.append(sum)
print(result[-1])
发表于 2025-09-26 22:25:55 回复(0)
#include <iostream>
using namespace std;

int main() {
    int t;
    cin>>t;
    if (t<3) {
    cout<<1;
    }else {
    int a,b=1,c=1;
    a=b+c;
    for (int n=3; n<t; n++) {//这里因为上面加过了要减一次
    b=c;
    c=a;
    a=b+c;
    }
    cout <<a;
    }
}
// 64 位输出请用 printf("%lld")
发表于 2025-09-16 22:02:22 回复(1)
n = int(input())
F = [1, 1]
while n > len(F):
    F.append(F[len(F)-1]+F[len(F)-2])
print(F[len(F)-1])
发表于 2025-08-13 17:11:01 回复(0)
看到斐波那契数列,可能你会想到用递归解决,但是如果你不懂如何优化递归,那么用递归效率就太低了,此时你可以参考一下我的循环写法。
#include <stdio.h>

// 计算第 n 项的斐波那契数
int fibonacci_at(int n)
{
    /*
    * f1 : 比喻为指针,一开始指向第一项数
    * f2 : 比喻为指针,一开始指向第二项数
    * result : 由 f1 和 f2 求和而来,即为第三项的数
    * 
    * 如在这样的斐波那契数列中:1, 1, 2, 3, 5, 8 ...
    * f1 和 f2 的指向为:      f1 f2
    */
    int f1 = 1, f2 = 1, result = f1 + f2;

    if (n < 3)
    {
        return 1;
    }

    /*
    * 在这样的斐波那契数列中,只在计算第4项数才开始向右移动 f1 和 f2
    *
    * 计算第3项:1, 1, 2, 3, 5, 8 ...
    *           f1 f2
    * 计算第4项:1, 1, 2, 3, 5, 8 ...
    *              f1 f2
    * 计算第5项:1, 1, 2, 3, 5, 8 ...
    *                 f1 f2
    */
    while (n-- > 3)
    {
        f1 = f2;
        f2 = result;

        result = f1 + f2;
    }

    return result;
}

int main() {
    
    int n = 0;

    scanf("%d", &n);

    printf("%d", fibonacci_at(n));

    return 0;
}


发表于 2025-08-08 20:13:46 回复(1)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    long long F1=1,F2=1;            // F1和F2的初始值, 定义long long类型存储结果,避免溢出

    if(n==1 || n==2){
        cout<<1<<endl;
        return 0;
    }

    long long Fn;
    for(int i=3;i<=n;i++){
        Fn = F1 + F2;               // 当前项 = 前两项之和
       
        // 更新前两项,为下一次计算做准备
        F1=F2;                      
        F2 = Fn;                    
    }
    cout<<F2<<endl;                 // F2 刚好存储的是第 n 项的值
}
// 64 位输出请用 printf("%lld")
发表于 2025-10-18 19:36:48 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a[n];
    a[1]=1;
    a[2]=1;
    for(int i=3;i<=n;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
cout<<a[n];
}
发表于 2025-10-06 12:04:31 回复(0)
import sys
n=int(input())
a=[1,1]
for i in range(2,n,1):
    a.append(a[i-1]+a[i-2])
print(a[n-1])


发表于 2025-10-04 23:41:31 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,N,i,ii1,ii2;
    cin>>n;
    i=1;
    ii1=0;
    ii2=1;
    while(i<=n){
        N=ii1+ii2;
        ii1=ii2;
        ii2=N;
        i++;
    }
    cout<<ii1;
    return 0;
}
发表于 2025-09-25 22:41:55 回复(0)
n = int(input())

def fb(n):
    if n <= 2:
        return 1
    else:
        return fb(n-1) + fb(n-2)

print(fb(n))

发表于 2025-09-23 13:02:07 回复(0)
#include <iostream>
using namespace std;

int main() {
   int n;
   cin>>n;
   if(n<=0||n>46){
    cout<<"请输入正确的值";
   }
  int F[n];
  F[1]=1;
  F[2]=1;
  for(int i=3;i<=n;i++){
    F[i]=F[i-1]+F[i-2];
  }cout<<F[n];
}
// 64 位输出请用 printf("%lld")
发表于 2025-09-22 11:36:46 回复(0)
#include <stdio.h>

int main() {
    int a, b,c=1,v1=1,v2=0;
scanf("%d",&a);
for(b=1;b<a;b++){
c=v1+v2;
v2=v1;
v1=c;
}
printf("%d",c);
}

发表于 2025-09-18 21:14:43 回复(1)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
         
        int n = in.nextInt();
        int F[] = new int[47];      
        F[1] = 1;  
        F[2] = 1;

        if(n >= 3){
            for(int i=3; i<n+1; i++){
                F[i] = F[i-1] + F[i-2];
                F[n] = F[i];
            }

        }
        System.out.print(F[n]);    

       
    }
   
 
}
发表于 2025-09-02 09:41:26 回复(0)
#include <iostream>
using namespace std;

int fib(int n){
    if(n == 1 || n == 2){
        return 1;
    }else{
        return fib(n - 1) + fib(n - 2);
    }
}

int main() {
    int n;
    int a = 1, b = 1, c = 0;
    cin >> n;
    // 递推
    // if(n == 1 || n == 2){
    //     cout << 1;
    // }else{
    //     for(int i = 1; i < n; i++){
    //         c = a + b;
    //         a = b;
    //         b = c;
    //     }
    //     cout << a;
    // }
    cout << fib(n);

   
}
// 64 位输出请用 printf("%lld")
发表于 2025-08-15 20:59:22 回复(0)
def fn(n):
    if n==1:
        return 1
    elif n==2:
        return 1
    else:
        return fn(n-1)+fn(n-2)

n=int(input())
print(fn(n))
发表于 2025-08-07 22:44:07 回复(0)
#include<iostream>;
#include<iomanip>;
#include<cmath>;
using namespace std;
int main()
{
    int n;
    int fn[47] = { 0,1,1 };
    cin >> n;
        for (int i = 3; i <= 46; i++)
        {
            fn[i] = fn[i - 1] + fn[i - 2];
            if (n == i)
            {
                cout << fn[i];
                return 0;
            }
        }
    cout << fn[n];
    return 0;
}
发表于 2025-08-02 16:59:20 回复(0)
def fib(n) -> int:
    pre : int = 0
    cur : int = 1
    for i in range(n - 1):
        pre, cur = cur, pre + cur
    return cur

n : int = int(input())
print(fib(n))


发表于 2025-07-24 11:39:48 回复(0)
use std::io;

fn main() {
    let mut stdin = String::new();

    io::stdin()
        .read_line(&mut stdin)
        .expect("");

    let mut n = stdin
        .trim()
        .parse()
        .expect("");

    if n == 1 || n == 2 {
        println!("1");
    } else {
        let (mut a, mut b) = (1, 1);

        for _ in 3..= n {
            let mut next = a + b;
            a = b;
            b = next;
        }

            println!("{}", b);
    }

}
发表于 2025-07-22 11:33:46 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    int f[n];
    f[0] = 1;
    f[1] = 1;

    if(n==1 || n==2){
        cout << 1;
    }
    else {
        for(int i = 2;i<=n-1;i++)
        {
            f[i] = f[i-1] + f[i-2];
        }
        cout << f[n-1];
    }
}

发表于 2025-07-14 15:29:23 回复(0)