描述:
输入:
多组测试数据,每行只有一个数n,1<=n<=1000
输出:
计算出1/1 + 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + .....一直到第n项的和,
每项的分子分母是由斐波那契数列中取相邻的两个得到,计算结果保留三位小数
开发工具:VC 6.0
实现代码如下:
方法一:实现的太笨了,但确实是一种傻子方法,呵呵!
Code
1 #include <iostream>
2 using namespace std;
3 #include<iomanip>
4 #define N 999
5
6 void ArrayMothed();
7 int main(void)
8 {
9 ArrayMothed();
10 return 0;
11 }
12 void ArrayMothed()
13 {
14 int A[999],B[999];
15 double Sum[N];
16 int i,n;
17 double Result;
18 A[0] = 1;
19 A[1] = 2;
20 B[0] = 1;
21 B[1] = 1;
22 Sum[0] = 0;
23
24 for(i = 2;i < N;i ++)
25 {
26 B[i] = B[i-1] + B[i-2];
27 }
28 for(i=2;i < N;i ++)
29 {
30 A[i] = A[i-1] + A[i-2];
31 }
32 for(i=0;i < N;i ++)
33 {
34 Sum[i] = (double)A[i]/B[i];
35 //cout<<setiosflags(ios::fixed)<<setprecision(3);
36 //cout << "Sum" << i << " " << Sum[i] << endl;
37 }
38
39 cin >> n;
40 while(n >=1 && n <=999)
41 {
42 Result = 0;
43 for(i = 0;i < n;i ++)
44 {
45 Result += Sum[i];
46 }
47
48 cout<<setiosflags(ios::fixed)<<setprecision(3);
49 cout << Result << endl;
50 //getchar();
51 cin >> n;
52 }
53 }
当然还有其它很多实现方式。以后再研究。
代码二:相对简单一些:
Code
void Fabo()
{
int a,b,temp,n;
double Sum;
cin >> n;
while(n >=1 && n <= 1000)
{
Sum = 0;
a = 1;
b = 1;
for(int i=1;i <=n;i ++)
{
temp = a + b;
Sum += (double)a/b;
b = a;
a = temp;
}
cout<<setiosflags(ios::fixed)<<setprecision(3);
cout << Sum << endl;
cin >> n;
}
}