懒知


私信TA

用户名:Lzhia

访问量:4671

签 名:

等  级
排  名 3418
经  验 1863
参赛次数 0
文章发表 12
年  龄 0
在职情况 学生
学  校 YBXY
专  业

  自我简介:

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


参考代码:

#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分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区