> 文档中心 > 以斐波那契数列分割战场

以斐波那契数列分割战场


       按每行输出4个数,输出斐波那契数列1,1,2,3,5,8,13 ...,输出前40位数

          完美的几何学者,以斐波那契数列分割战场!

       关于斐波那契数列,它的规律是非常显而易见的,无非就是从第三项开始,每一项都是前两项之和,接下来我将用同一个大方向,不同的两种理解方式来解决这道题.

1.借用for循环,三个变量解决

      在写代码之前,老样子先用文字叙述一遍便于同学们的理解,思路如下:f1=1,f2=1,第三项等于前两项之和即 f1+f2, 在后面的运算中,第四项为第二项和第三项的和,即1+2,以及后面第五项为第三项和第四项的和,即2+3,,所以我们干脆拿 f1, f2 来存储变量,比如说:计算第三项时 f1=f1+f2 (2=1+1),计算第四项时,我们接着拿 f2 来存储,那第四项的值就可以表示为 f2=f2+f1;(注意:这两个式子前后顺序不能调换)依次类推,后面的数值都可以如此表示;

我们来看一下NS流程图:

 

     思路应该比较清晰了吧,我们接着看代码:

#include void main(){int i,f1,f2;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12d%12d",f1,f2);f1=f1+f2;f2=f2+f1;if(i%2==0)printf("\n");}}

 2.借用for循环,四个变量解决

     这种方法做法上跟第一种差别不大,但是做题方向,思路是不同的,希望萌新们能更好的理解并运用for循环吧,思路如下:我们先引入三个变量,f1, f2, f3, f3 用来存储前两项之和,即 f3=f1+f2, 每一次运算后,将 f1, f2, f3 的值打印出来,再将后面新的变量存储到之前的变量中去,即每运算后,将f2的值存储到f1中,将f3的值存储到f2中,再用f3来存储新的值,比如说:f1=1 , f2=1, f3=f1+f2  即 (2=1+1),然后打印出三个数的值后,将f2的值存储到 f1,将 f3 的值存储到f2,f3 用来存储第四项的值,即第四项可以表达为:f3=f2+f1 (3=2+1) ,如此,后续运算皆可这样表示。

       我们先来看NS流程图:

    捋一捋思路,接着看代码:

#include void main(){int i,f1,f2,f3;f1=1;f2=1;printf("%12d%12d",f1,f2);for(i=3;i<=40;i++){f3=f1+f2;printf("%12d",f3);if(i%4==0)printf("\n");f1=f2;f2=f3;}}

       以上两种解题思路对小白比较友好,没有什么深度,for循环的两种解题方向,第一种的优点呢,无非就是少用了一个变量,其实差别不大。

        同学们学废了吗?欢迎留言  欢迎私聊 !

网赚站