2025-03-25 学习记录--C/C++-PTA 习题6-4 使用函数输出指定范围内的Fibonacci数

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

习题6-4 使用函数输出指定范围内的Fibonacci数

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

函数接口定义: 👇🏻

int fib( int n );
void PrintFN( int m, int n );

其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。

裁判测试程序样例: 👇🏻

#include <stdio.h>

int fib( int n );
void PrintFN( int m, int n );
    
int main()
{
    int m, n, t;

    scanf("%d %d %d", &m, &n, &t);
    printf("fib(%d) = %d\n", t, fib(t));
    PrintFN(m, n);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

20 100 7

输出样例1:

fib(7) = 13
21 34 55 89

输入样例2:

2000 2500 8

输出样例2:

fib(8) = 21
No Fibonacci number

二、代码(C语言)⭐️

// 函数功能:返回第n项斐波那契数
// 斐波那契数列定义:1, 1, 2, 3, 5, 8, 13...
int fib(int n) {
    // 单独处理第1项
    if(n == 1) return 1;  // 根据题目要求,第1项为1

    // 初始化变量:
    int prev2 = 0;  // 存储上上一项的值(F(n-2))
    int prev1 = 1;  // 存储上一项的值(F(n-1))
    int curr = 1;   // 存储当前项的值(F(n)),默认从第2项开始
    int i = 2;      // 当前计算的项数,从第2项开始

    // 使用循环计算第n项斐波那契数
    while(i < n) {  // 当i小于目标项数n时继续计算
        prev2 = prev1;    // 更新上上一项为原来的上一项
        prev1 = curr;     // 更新上一项为原来的当前项
        curr = prev2 + prev1;  // 计算新的当前项
        i++;              // 项数计数器加1
    }
    
    return curr;  // 返回第n项斐波那契数
}

// 函数功能:输出在[m,n]范围内的所有斐波那契数
void PrintFN(int m, int n) {
    int hasFibonacci = 0;  // 标记变量,0表示未找到,1表示已找到
    int currFib;           // 存储当前计算的斐波那契数
    int i = 1;             // 从第1项斐波那契数开始检查

    // 循环计算斐波那契数,直到超过n的上限
    while((currFib = fib(i)) <= n) {
        // 检查当前斐波那契数是否在[m,n]范围内
        if(currFib >= m) {
            // 如果是第一个找到的数,直接输出
            // 如果不是第一个,先输出空格再输出数字
            if(hasFibonacci) {
                printf(" ");  // 输出数字间的空格
            }
            printf("%d", currFib);  // 输出当前斐波那契数
            hasFibonacci = 1;  // 标记已找到斐波那契数
        }
        i++;  // 检查下一项斐波那契数
    }
    
    // 如果未找到任何斐波那契数
    if(!hasFibonacci) {
        printf("No Fibonacci number");  // 输出提示信息
    }
    
    printf("\n");  // 输出换行符
}

在这里插入图片描述

在这里插入图片描述

注意 📢】结合下面文章一起查看:🦋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值