有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和的整数部分。 n的值运行时通过键盘输入给定,并且n<=30。 输出值只保留整数(不要四舍五入)。 效果如下: 输入:20。 输出:32。用C语言
时间: 2024-10-28 09:08:29 浏览: 32
这个问题是一个经典的动态规划问题,可以利用斐波那契数列的性质来解决。斐波那契数列在这个数列中可以看到,每个分数的分子是前两个分数分母之和,而分母则是当前项的序号。我们可以创建一个动态数组`fib`存储斐波那契数列的前n项,同时维护一个变量`sum`来存储分数的和。
```c
#include <stdio.h>
// 斐波那契数列函数
int fibonacci(int n) {
if (n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n, i, sum = 0;
printf("请输入n(不大于30): ");
scanf("%d", &n);
// 初始化斐波那契数列
int fib[31] = {0, 1};
for (i = 2; i < n; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
// 计算分数和
for (i = 1; i <= n; i++) {
int numerator = fib[i - 1];
int denominator = i;
// 分数和的整数部分即为分子除以分母的结果向下取整
int frac_sum = numerator / denominator;
sum += frac_sum;
}
printf("前 %d 项之和的整数部分: %d\n", n, sum);
return 0;
}
```
当输入n=20时,这个程序会计算出斐波那契数列前20项分数之和的整数部分,然后输出结果。注意,虽然题目说"不超过30",但为了代码完整性和演示,我们这里设置了更大的数组长度,实际运行时需要根据实际需求调整。
阅读全文