前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(斐波那契数列)使用函数输出指定范围内Fibonacc的数(PTA)

(斐波那契数列)使用函数输出指定范围内Fibonacc的数(PTA)

作者头像
兰舟千帆
发布2022-07-16 12:22:54
8600
发布2022-07-16 12:22:54
举报

题目要求:

本题要求实现一个计算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;

代码语言:javascript
复制
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 思路解析: 本题要求我们实现两个函数 1:fib(int n); 2:PrintFN(int m,int n)

fib(int n)要求我们输出指定斐波那契数列项的值 首先我们来写一段斐波那契分析一下: 1 1 2 3 5 8 13 可以看到,满足斐波那契数列的特点,即从第三项开始任意一项等于它的前两项的值之和。 我们找出了规律 我们可以想办法将第三项及以后的项用几个有规律的式子表达出来 我们需要设定三个变量 a,b.c a,b就是c的前两项,然后我们要满足这个 c=a+b; 那么a和b是多少,我们前面提到是从第三项开始,因为前面两项它没有前两项,所以我们初步想的是a =1,b=1,然后c就=2; 然后我们还需要更新数据啊,因为我们要得出后面几项的值,我们需要根据传入的指定项数来更新值,于是我们想法是再定义一个变量i,我们给它赋值为2如果它的值是大于等于n的话,我们直接返回1,反正那我们需要更新c的值。我们这样写一段代码 下面展示一些 内联代码片

代码语言:javascript
复制
int fib(int n){
	int i =2,a=1,b=1,c=0;
	if(n<=i){
	return 1;
	}else {
	for(i=2;i<n;i++){
	//下面这几个表达式是最关键的
		c=a+b;//求指定项数值的表达式
		a=b;// 观察你会发现为什么这么做,如1 1 2 3 5.....
		//其实就是指定的位置更新值
		b=c;
	
	}


}
return c;

}

我们实现了这个函数 还有一个 PrintFN(int m,int n),该函数要求的是要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。 1:输出指定区间的所有fibonacci数; 2:相邻数字之间要有一个空格; 3:行末尾不能有多余空格; 4:如果没有满足的fibonacci,则输出一行“No Fibonacci number”。 ok,开始分析,我们要统计的实在m->n区间范围内的斐波那契数,那我们怎么控制条件?我们需要这样做,我们定义一个变量i,我们调用上面的函数fib(int n),我们将i传进去,就能得出相应的斐波那的值,我们不妨直接从开始一直统计吧,让他们进入>=m的范围,但是<=n就好了。我们这样写一段代码:

代码语言:javascript
复制
void PrintFN(int m,int n){
    int i=1;
    int count =0;
    while(fib(i)<=n){
            if(fib(i)>=m){
            count++;
                if(count==1){//分开输出是因为第一个数字前面没有空格
                    printf("%d", fib(i));
                }
                else{
                    printf(" %d ", fib(i));
                }
            }
        i++;
    }
    if(count==0){
        printf("No Fibonacci number\n");
    }
}

我感觉这个函数没啥好解释的,哈哈哈。

1:题目要求的完整函数接口代码

代码语言:javascript
复制
int fib(int n){
	int i =2,a=1,b=1,c=0;
	if(n<=i){
	return 1;
	}else {
	for(i=2;i<n;i++){
		c=a+b;
		a=b;
		b=c;

	}


}
return c;
}
void PrintFN(int m,int n){
    int i=1;
    int count =0;
    while(fib(i)<=n){
            if(fib(i)>=m){
            count++;
                if(count==1){//分开输出是因为第一个数字前面没有空格
                    printf("%d", fib(i));
                }
                else{
                    printf(" %d ", fib(i));
                }
            }
        i++;
    }
    if(count==0){
        printf("No Fibonacci number\n");
    }
}

2:完整代码 下面展示一些 内联代码片

代码语言:javascript
复制
#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;
}

/* 你的代码将被嵌在这里 */
int fib(int n){
	int i =2,a=1,b=1,c=0;
	if(n<=i){
	return 1;
	}else {
	for(i=2;i<n;i++){
		c=a+b;
		a=b;
		b=c;

	}


}
return c;
}
void PrintFN(int m,int n){
    int i=1;
    int count =0;
    while(fib(i)<=n){
            if(fib(i)>=m){
            count++;
                if(count==1){//分开输出是因为第一个数字前面没有空格
                    printf("%d", fib(i));
                }
                else{
                    printf(" %d", fib(i));
                }
            }
        i++;
    }
    if(count==0){
        printf("No Fibonacci number\n");
    }
}

我的这里是没问题的

在这里插入图片描述
在这里插入图片描述

注:在PTA做题一定要注意格式的问题,格式出错在PTA是很恶心的,细节决定成败。

PTA做题链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档