第一种:我们发现其实分子和分母都是斐波那契数列(从第三项开始,每一项等于前两项之和),所以我们可以定义两个数组,分别来存放分子和分母。然后两个数组里的数按位置相除累加。


参考代码:

#include<stdio.h>

int main ()
{
   int N;
   double total = 0;
   scanf("%d",&N);
   int a[N],b[N];
   a[0] = 2,a[1] = 3; //这里需要手动输入0 1位置的值
   b[0] = 1,b[1] = 2;
   for(int i = 2;i < N;i++){    //按规律求出数组里的每个数
       a[i] = a[i - 1] + a[i - 2];
       b[i] = b[i - 1] + b[i - 2];
   }

   for(int i = 0;i < N;i++){
       total += (double )a[i] / b[i]; 这里需要强制类型转换或者一开始定义的时候就定义成double
   }
   printf("%.2lf",total);

   return 0;
}


第二种(不太好理解):

我们从题面中可以看到一下规律:从第二项开始,后一项的分子为前一项的分子与分母之和,分母为前一项的分子,所以我们可以从这点入手利用for循环累加。本题的难点则是在于对分子分母变化的控制。

参考代码:

#include


int main()

{

   double a = 2.0,b = 1.0,c = 1.0;

   double sum = 2.0;

   int i,N;

   scanf("%d",&N);

   for(i = 1;i < N;i++)

   {

        b = c;

        c = a;

        a = a + b;

        sum += a / c;

   }


   printf("%.2lf",sum);


    return 0;

}

程序解读:

        我们定义a为分子,c为分母,b为初始分母,也是中间变量,利于我们计算和理解。

因为sum的值2.0,所以for循环的循环变量也是从1开始的。方便理解循环的内部,我们先把b = c;屏蔽。根据规律,将a的值赋给c作为分母,a+b的值赋给a作为分子,我们就能得到下一项的值,然后累加到sum里面。但是就这样写,我们发现b的值始终为1.0,没有得到更新,只能正确的得到第二项的值。此时我们则要考虑如何对b的值进行正确的更新。

        我们知道b的意义本质上也是分母,他决定着下一项分子的值, 由a = a + b;这句语句便知,在新的式子a/c中,c为分母,这里也就不难理解为什么会有b = c这句了。







点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论