有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
输入格式
N
输出格式
数列前N项和
样例输入
复制
10
样例输出
复制
16.48
观察数列: 2/1 3/2 5/3 8/5 13/8 21/13
以第3和第2项为例,第3项中 5/‘3’ 的3来自上一项的3,而‘5’/3是上一项的分子和分母的和
5=3+2;以此类推,所以解法我用的迭代,用初始化第一项的c2和c1来递推下一项的c2和c1;
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
long int N;
double sum = 0;
cin >> N;
double* a = new double[N]; //使用动态内存分配
double c1 = 1,c2 = 2,temp;
for (int i=0;i<N;i++) {
//(n+1)/n 2/1 3/2 5/3 8/5 21/13
a[i] = c2 / c1;
temp = c2;
c2 = c2 + c1; //下一个的分母等于上一个的分子+分母
c1 = temp; //下一个的分子的上一个分母
sum = sum + a[i];
}
//测试输出数组每项的值
//int cnt = 0;
//for (int i = 0; i < N; i++) {
// cout<< a[i] << " ";
// cnt++;
// if (cnt % 3 == 0) {
// cout << endl; //每三个换行
// cnt = 0;
// }
//}
cout<<fixed<<setprecision(2) << sum<<endl;
return 0;
}