有一分数序列: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


相关文章
|
4月前
PTA-求分数序列的前n项和分数 20
求分数序列的前n项和分数 20
36 0
|
9月前
|
算法 测试技术 C#
C++前缀和算法的应用:统计得分小于K的子数组数目
C++前缀和算法的应用:统计得分小于K的子数组数目
|
3月前
|
C++
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
|
3月前
分数序列
【6月更文挑战第9天】分数序列。
27 5
|
4月前
|
算法 测试技术 C++
【分解质因数 差分数组】2584. 分割数组使乘积互质
【分解质因数 差分数组】2584. 分割数组使乘积互质
【分解质因数 差分数组】2584. 分割数组使乘积互质
|
4月前
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 项之和
47 0
|
4月前
|
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;) ```
77 3
LeetCode-798 得分最高的最小论调 及差分和前缀和的学习
LeetCode-798 得分最高的最小论调 及差分和前缀和的学习
|
4月前
PTA-求奇数分之一序列前N项和
求奇数分之一序列前N项和
50 0
|
4月前
leetcode-1984:学生分数的最小差值
leetcode-1984:学生分数的最小差值
38 0