求C++中的级数1 + (1+3) + (1+3+5) + (1+3+5+7) + ...... + (1+3+5+7+...+(2n-1))和


我们已经给定了一个数字 n。我们的任务是编写一个程序,求出级数 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)).  的和。

使用一个例子来帮助理解题目:

输入:  n = 5

输出: 55

根据题目,假设用户给我们一个数字“n”,然后我们求级数 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) 的和。

首先,我们需要弄清楚这个级数的含义。

当 n = 1 时,级数变为 1。

当 n = 2 时,级数变为了 1 + (1+3),因为最后一个项 2n-1 可以计算为 2 乘以 2,然后减去 1,即 3。

n 的值
2n-1
级数变为
1
1
1
2
3
1+ (1+3)
3
5
1+ (1+3) + (1+3+5)
4
7
1+ (1+3) + (1+3+5) + (1+3+5+7)

这个问题可以通过两种不同的方法解决。一种是借助数学方法,可以获得总和的表达式,因此不需要任何循环。另一种方法则是在代码中应用两个循环。

使用循环直接求解

可以看到,该级数 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) 的每个项本身就是一个级数。因此,我们将使用嵌套循环。外层循环计算第二个项。而内层循环则用于计算项本身。

实例

在线演示

#include<stdio.h>

int calcSum(int n){
   int sum = 0;
   for (int i = 1; i <= n; i++) {
      // the first value of the term is always 1
      int value = 1;
      for (int j = 1; j <= i; j++) {
         sum += value;
         // next term
         value += 2;
      }
   }
   return sum;
}

int main(){
   int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

输出

The sum of the series upto 35 is 14910

程序的工作方式

  • 用户输入 n 的值。比如 2。
  • 声明名为“sum”的变量,其初始值是 0。
  • 当 i=1,for 条件 i<=n 为真,因此,循环将起作用。
    • 变量“ft”的值是 1。
    • j 的第一个值是 1。条件为真,因为 j 的值等于 i 的值,也是 1。所以,j 循环起作用。
    • ft 的值将增加到 sum。因此,sum 变成 0+1 等于 1。
    • ft 的值已更改并增加了 2,因此其新值为 1+2 = 3。
    • j 的值增加 1,变成 2。
    • 但现在内部 for 循环的条件为假,因为现在 j>i。因此,j 循环已退出。
  • 现在 i 的值增加 1,变成 2,因此 i=2,条件 i<= n 为真,因此进入循环。
    • 变量“ft”的值再次定义为 1。
    • 当 j 的值为 1 时,循环将起作用,因为 j<i 或 1<2。
    • ft 的值将增加到 sum。sum 的值已经是 1。因此,sum 的新值为 1+1 = 2。
    • ft 的值已更改并增加了 2,因此 ft 的新值为 1+2 =3。
    • j 的值增加 1,变成 2。for 循环条件为真,因为 j 等于 i。
    • ft 的值将增加到 sum。sum 的值已经是 2。因此,sum 的新值为 2+3 = 5。
    • ft 的值已更改并增加了 2,因此 ft 的新值为 3+2 =5。
    • 循环存在
  • 现在 i 的值增加 1,变成 3,因此 i=3,条件 i<= n 为假,因此退出循环。
  • 在屏幕上打印 sum 的消息和值。

数学解

通过找到该问题的数学解并编写代码,将大大简化我们的代码。

设该系列的一般项 Tn  

在进一步进行之前,我们应该知道 1+3+5+7+9…..(2n-1) 系列的总和是 n2, 系列

12+22+32+42….n2  的总和是 i  =

说明我们代码工作原理的程序

实例

在线演示

#include<stdio.h>

int calcSum(int n){
   // required sum
   return (( (n) * (n + 1) * (2*n + 1 ) )/6 ) ;
}

int main(){
int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

输出

The sum of the series upto 35 is 14910

上述代码的工作原理: 

例如,让我们假设用户输入了 n 的值为 2,那么 2n-1 的值是 3,系列变成 1+ (1+3)。

但让我们通过代码理解并获取总和。

  • 使用 2 的值调用函数 sum()。
  • 函数将  的值计算为 5,并将其返回给 main 函数。
  • 带着答案的消息将打印在屏幕上。

更新于: 2021 年 1 月 27 日

486 次浏览

开启你的 职业生涯

完成课程即可获得认证

开始
广告
© . All rights reserved.