再战斐波那契数列

本文最后更新于:a few seconds ago

某日,我的老师又留了一道涉及类似斐波那契数列的题目。

老规矩,上题。

1
2
3
4
5
有一分数序列:2/1,3/25/3,8/513/8,21/13...求出这个数列的前n项之和。n的值由scanf输入。
【输入形式】:输入一行,包括n的值。
【输出形式】:输出一行,给出前n项之和,保留小数点后6位。
【样例输入】:2
【样例输出】:3.500000

先找规律

1
2/1  3/2  5/3  8/5  ……

规律:第n项的分子由第(n-1)项的分子和分母加和所得,分母为前一项的分子。

不过,这个数列还有另一个规律,那就是把分母和分子拆开来看。第n项的分子由第(n-1)项的分子和第(n-2)项的分子加和所得,分母同理。
(by the way,第二个规律是我同学找的。)

对程序进行一个写

既然已经有了思路,那就开写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main(){
int n;
double a,sum=0.0,t=2.0,b=1.0,m;
scanf("%d",&n);
for(int i=1;;i<=n;i++){
a=t/b;
m=t;
t=t+b;
b=m;
sum=sum+a;
}
printf("%.6lf",sum);
return 0;
}
//这里用第一规律方法解题

return 0;

嗯,其实只是想Mark一下自己第一次这么顺利准确的解出算法。
不过学校的服务器啥时候能支持C99啊(恼)。

1
2
3
4
5
6
7
8
9
10
11
//C99
for(int i=0;i<=0;i++){

}

//C89
int i=0;
for(;i<=0;i++){

}