首页 > 试题广场 >

牛牛学数列5

[编程题]牛牛学数列5
  • 热度指数:30915 时间限制: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
#include<stdio.h>
int add(int j)
{
   if(j ==1 || j == 2)
     return 1;
   else
     return add(j - 1)+ add(j -2);
}
int main() {
    int n = 0,a = 0;
    scanf("%d",&n);
   
    printf("%d\n",add(n));
    return 0;
}
发表于 2026-04-08 08:34:21 回复(0)
#include <stdio.h>

int main() {
   int n=0;
   scanf("%d",&n);
   long long fib[47];
   int i;
   if(1<=n&&n<=46)
   {
    fib[1]=fib[2]=1;
    if(n==1||n==2)
    printf("1");
    else{
    for(i=3;i<=n;i++)
    {
     fib[i]=fib[i-1]+fib[i-2];
 
    }
       printf("%lld",fib[n]);}
   
 
   }
    return 0;
}
发表于 2026-03-26 12:05:14 回复(0)
#include <stdio.h>
int fib_n(int n){
    int f[n+2];//代码里写n+2是为了预留额外的空间,避免出现数组越界问题。eg.当n=0,n+2=2,数组长度为2,足够储存f[0]和f[1]
    f[0]=0;
    f[1]=1;
    for(int i=2;i<=n;i++){
        f[i]=f[i-1]+f[i-2];
    }
    return f[n];
}
int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",fib_n(n));
    return 0;
}
发表于 2026-03-23 22:32:20 回复(0)
#include<stdio.h>
int main(){
    int n,i,F,c1=1,c2=1;
    scanf("%d",&n);
    if(n==1||n==2){
        printf("1");
    }else{
        for(i=2;i<n;i++){
        F=c1+c2;
        c1=c2;
        c2=F;
    }
    printf("%d",F);}
    return 0;
}
发表于 2026-03-05 16:41:57 回复(0)
#include <stdio.h>
int fibo(int n){
    if(n==1||n==2){
        return 1;
    }
    return fibo(n-1)+fibo(n-2);
}
int main() {
    int n;
    scanf("%d",&n);
    int result=fibo(n);
    printf("%d\n",result);
    return 0;
}
发表于 2026-01-29 15:25:02 回复(0)
#include <stdio.h>
#include <math.h>

int main() {
	int n;
	if (scanf("%d", &n) != 1) {
		return 1;
	}
	if (n < 1 || n > 46) {
		return 1;
	}
	printf("%d", (int)round((pow((1 + sqrt(5)) / 2, n) - pow((1 - sqrt(5)) / 2, n)) / sqrt(5))); //这是通项公式
	return 0;
}

发表于 2026-01-06 18:36:27 回复(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 回复(2)
看到斐波那契数列,可能你会想到用递归解决,但是如果你不懂如何优化递归,那么用递归效率就太低了,此时你可以参考一下我的循环写法。
#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)