有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

简介: 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

C语言实现


在C语言中,我们可以直接通过迭代计算每一项的分子和分母,并累加它们的和(注意这里累加的是每一项的数值,即分数转换为浮点数后的值)。这里给出两种实现方式:


方法1:直接计算并累加


c复制代码
 #include <stdio.h>  
 
   
 
 int main() {  
 
     double sum = 0.0;  
 
     int numerator = 2, denominator = 1;  
 
     for (int i = 0; i < 20; i++) {  
 
         sum += (double)numerator / denominator;  
 
         int nextNumerator = numerator + denominator;  
 
         denominator = numerator;  
 
         numerator = nextNumerator;  
 
     }  
 
     printf("The sum of the first 20 terms is: %.15f\n", sum);  
 
     return 0;  
 
 }



方法2:使用结构体和函数封装


如果你想要更结构化的代码,可以使用结构体来存储分数,并定义函数来计算下一项和累加和。


c复制代码
 #include <stdio.h>  
 
   
 
 typedef struct {  
 
     int numerator;  
 
     int denominator;  
 
 } Fraction;  
 
   
 
 Fraction getNextFraction(Fraction f) {  
 
     Fraction next;  
 
     next.numerator = f.numerator + f.denominator;  
 
     next.denominator = f.numerator;  
 
     return next;  
 
 }  
 
   
 
 double sumFractions(int n) {  
 
     double sum = 0.0;  
 
     Fraction f = {2, 1};  
 
     for (int i = 0; i < n; i++) {  
 
         sum += (double)f.numerator / f.denominator;  
 
         f = getNextFraction(f);  
 
     }  
 
     return sum;  
 
 }  
 
   
 
 int main() {  
 
     printf("The sum of the first 20 terms is: %.15f\n", sumFractions(20));  
 
     return 0;  
 
 }



Python实现


Python的实现通常更加简洁和直观。


方法1:直接计算并累加


python复制代码
 def sum_fractions(n):  
 
     numerator, denominator = 2, 1  
 
     total_sum = 0.0  
 
     for _ in range(n):  
 
         total_sum += numerator / denominator  
 
         numerator, denominator = numerator + denominator, numerator  
 
     return total_sum  
 
   
 
 print(f"The sum of the first 20 terms is: {sum_fractions(20)}")


方法2:使用生成器


如果你想要一个更“Pythonic”的解决方案,可以使用生成器来生成分数序列,并计算它们的和。


python复制代码
 def fraction_generator(n):  
 
     numerator, denominator = 2, 1  
 
     for _ in range(n):  
 
         yield numerator / denominator  
 
         numerator, denominator = numerator + denominator, numerator  
 
   
 
 def sum_fractions(n):  
 
     return sum(fraction_generator(n))  
 
   
 
 print(f"The sum of the first 20 terms is: {sum_fractions(20)}")


这两种Python方法都简洁地实现了题目要求,并展示了Python在处理此类问题时的灵活性和强大功能。


image.png


相关文章
|
6月前
PTA-求分数序列的前n项和分数 20
求分数序列的前n项和分数 20
64 0
|
11月前
|
算法 测试技术 C#
C++前缀和算法的应用:统计中位数为 K 的子数组
C++前缀和算法的应用:统计中位数为 K 的子数组
|
11月前
|
算法 测试技术 C#
C++前缀和算法的应用:统计得分小于K的子数组数目
C++前缀和算法的应用:统计得分小于K的子数组数目
|
2月前
求出这个数列的前20项之和
求出这个数列的前20项之和。
31 11
|
6月前
2572. 无平方子集计数(状态压缩dp)
2572. 无平方子集计数(状态压缩dp)
|
5月前
分数序列
【6月更文挑战第9天】分数序列。
35 5
|
6月前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
43 1
|
6月前
16.有一分数序列 1/2,2/3,3/5,5/8,8/13,13/21,…求出这个序列的前200 项之和
16.有一分数序列 1/2,2/3,3/5,5/8,8/13,13/21,…求出这个序列的前200 项之和
67 0
|
6月前
|
Python
PTA-第4章-8 求分数序列前N项和
编写程序计算序列 2/1+3/2+5/3+8/5+... 的前N项和,其中每项分子是前一项分子与分母之和,分母是前一项分子。输入一个正整数N,输出部分和,精确到小数点后两位。给定N=20,输出为32.66。以下是代码实现: ```python n = int(input()) sum = 0 a = 2 b = 1 for i in range(1, n + 1): sum += a / b c = a a = a + b b = c print(f&quot;{sum:.2f}&quot;) ```
125 3
|
6月前
PTA-求奇数分之一序列前N项和
求奇数分之一序列前N项和
89 0