解题思路:

        1:把斐波纳契数列,分为两部分,前面的两个1,以及后面的部分,把这两部,分开输出;

        2:输出个数为1,则输出:1,输出个数为2,则输出:1''空格''1;

        3:输出个数大于2小于等于40,则先输出:1"空格"1"空格 " ,后面的数根据规律(等于前面两个数的和)输出 ;

        4:把最后一个数分离出来输出,最后一个数后面不带空格;


       令前两个数为A=1,B=1;

       后面一个数就为A+B=2;

       这时前两个数要更新为A=1,B=2;

#include<stdio.h>
int main()
{
    int A=1,B=1,C,N;
    scanf("%d",&N);

    if((N>2)&&(N<=40))
    {
        printf("%d %d ",A,B);
        for(int i=0;i<N-3;i++)
        {
            printf("%d ",A+B);
            C=A;
            A=B;
            B=C+B;
        }
        printf("%d",A+B);
    }

    if(N==1)
    printf("%d",A);
    if(N==2)
    printf("%d %d",A,B);
}


     思路二:根据斐波纳契数列公式:

2017-12-15 18-30-50屏幕截图.png

#include <stdio.h>
#include <math.h>
int function( int i );


int main()
{
    int N;
    scanf( "%d", &N );

    for ( int i = 1; i <= N - 1; i++ )
        printf( "%d ", function( i ) );
    printf( "%d", function( N ) );
    return(0);
}


int function( int i )
{
    double    sqrt_five    = sqrt( 5.0 );
    double    pow1        = pow( ( (1.0 + sqrt( 5.0 ) ) / 2.0), i );
    double    pow2        = pow( ( (1.0 - sqrt( 5.0 ) ) / 2.0), i );
    int    number        = 1.0 / sqrt_five * (pow1 - pow2);
    return(number);
}

喜欢按个赞哦-.-

点赞(18)
 

0.0分

6 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 5 条评论

zhangzy 2年前 回复TA
思维严谨,末尾不能有空格都能注意到。
算法合理,没有数组,函数和指针。
差之毫厘,谬以千里;回归学过的东西。
秃头的忍鸡 3年前 回复TA
#include<stdio.h>
int main(){
	int a=1,b=1,c,N,i;
	scanf("%d",&N);
	if((N>2)&&(N<=40))
	{
		printf("%d %d ",a,b);
		for(i=0;i<N-3;i++)
		{
			printf("%d ",a+b);
		c=a;
		a=b;
		b=b+c;
		}
	}
	printf("%d",a+b);
	if(N==1)
	printf("%d",a);
	if(N==2)
	printf("%d %d",a,b);
	return 0;
}
  这个哪里错了呀
Manchester 4年前 回复TA
@小白 n=1 n=2 时 这两种亲情况 用数组存结果更好理解如A[i]=A[i-1]+A[i-2]
小白 4年前 回复TA
#include<stdio.h>
int main()
{
    int n,i;
    scanf("%d",&n);
    int f1=1,f2=1,f3;
    printf("%d %d ",f1,f2);
    for(i=3;i<=n;i++){
        f3=f1+f2;
       printf("%d ",f3);
       f1=f2;
       f2=f3;
    }
    return 0;
}
看这个,刚才那个没复制全
小白 4年前 回复TA
printf("%d %d ",f1,f2);
    for(i=3;i<=n;i++){
        f3=f1+f2;
       printf("%d ",f3);
       f1=f2;
       f2=f3;
    }
错误14%,大佬看一下哪里有问题