有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,… ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2。比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求这个分数序列的前n项之和。用C+ +
时间: 2024-09-28 07:09:39 浏览: 163
这个问题涉及到计算分数序列的和,可以根据已知的递推公式来设计算法。我们可以使用动态规划的思想,创建两个数组`prev_q`和`prev_p`分别存储前一项的分子和分母。对于每个新的分数,其分子将是上一项的分子和分母之和,而分母保持不变。
下面是一个简单的C++程序实现:
```cpp
#include <iostream>
using namespace std;
void fibonacciSum(int n) {
if (n <= 0) return;
int prev_q = 2; // q1 = 2
int prev_p = 1; // p1 = 1
long long sum = prev_q; // 前两项直接相加作为初始总和
for (int i = 2; i < n; ++i) {
int curr_q = prev_q + prev_p; // qi+1 = qi + pi
long long next_p = prev_q; // pi+1 = qi
sum += curr_q; // 更新总和
prev_q = curr_q; // 更新 prev_q
prev_p = next_p; // 更新 prev_p
}
cout << "前 " << n << " 项之和是: " << sum << endl;
}
int main() {
int n;
cout << "请输入序列的项数: ";
cin >> n;
fibonacciSum(n);
return 0;
}
```
当你运行这个程序并输入序列的项数时,它会输出该分数序列的前n项之和。注意这里为了防止整数溢出,将分子转换成了`long long`类型。
阅读全文