OneCoder Avatar
OneCodercoderli.com · 937 篇博文
三级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++三级练习 luogu-B2064, 斐波那契数列

📅 2024-11-14·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#一维数组

斐波那契数列本身可能并不一定涉及数组知识点,但本题中要求的输入、输出格式涉及到三级知识点一维数组的使用。 题目本身对小学生来说,也是有一定难度的。

luogu-B2064 斐波那契数列

题目要求

描述

斐波那契数列是指这样的数列:数列的第一个和第二个数都为 11,接下来每个数都等于前面 22 个数之和。

给出一个正整数 aa,要求斐波那契数列中第 aa 个数是多少。

输入

11 行是测试数据的组数 nn,后面跟着 nn 行输入。每组测试数据占 11 行,包括一个正整数 aa1a301 \leq a \leq 30)。

输出

输出有 nn 行,每行输出对应一个输入。输出应是一个正整数,为斐波那契数列中第 aa 个数的大小。

输入样例-1

4
5
2
19
1

输出样例-1

5
1
4181
1


题目分析

  • 读取nn的值,表示后续输入的数量
  • 循环nn次,读取每个测试数据aa
  • 对每个测试数据aa,使用循环从3开始,计算到输入的数据为止,通过每次将前两个数的和作为下一个数的值来计算斐波那契数列的第aa个数
  • 输出计算的结果

示例代码

CPP
#include <iostream>
using namespace std;
int main() {
    int n; // 定义变量n,用于存储测试数据的组数
    cin >> n; // 从输入流中读取n的值
    int* inputs = new int[n]; // 动态分配一个大小为n的整数数组,用于存储输入的数据
    int an = 0; // 定义变量an,用于临时存储输入的数据
    for (int i = 1; i <= n; i++) { // 循环n次,读取每个测试数据
        cin >> an; // 从输入流中读取an的值
        inputs[i - 1] = an; // 将读取到的数据存储到inputs数组中
    }
    for (int i = 1; i <= n; i++) { // 循环n次,处理每个测试数据
        if (inputs[i - 1] == 1 || inputs[i - 1] == 2) { // 如果输入的数据是1或2
            cout << 1 << endl; // 直接输出1,因为斐波那契数列的第1和第2个数都是1
        } else { // 如果输入的数据不是1或2
            int ans = 0; // 定义变量ans,用于存储计算的结果
            int a1 = 1; // 定义变量a1,用于存储斐波那契数列的第一个数
            int a2 = 1; // 定义变量a2,用于存储斐波那契数列的第二个数
            for (int j = 3; j <= inputs[i - 1]; j++) { // 从3开始,计算到输入的数据为止
                ans = a2 + a1; // 计算斐波那契数列的下一个数
                a1 = a2; // 更新a1的值
                a2 = ans; // 更新a2的值
            }
            cout << ans << endl; // 输出计算的结果
        }
    }
    return 0; // 返回0,表示程序执行成功
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

💬 读者留言与交流

0 条讨论
✨ 支持 Markdown 语法格式
还没有留言,快来成为第一个讨论者吧!