C++程序:求解级数1 + 2 + 2 + 3 + 3 + 3 + .. + n的和


本文给定一个数字n,表示该级数的第n项。我们的任务是编写一个C++程序来求解级数1 + 2 + 2 + 3 + 3 + 3 + .... + n的和。

这个级数与其他级数不同,因为它包含根据其值重复的项。级数1 + 2 + 2 + 3 + 3 + 3 + … + n由重复的项组成,这些项仅根据其值无限重复。例如,1出现一次,2出现两次,3出现三次,以此类推,直到第n个数字出现n次。

为了计算级数的和,您可以首先识别序列中的整体模式,然后定义模式重复的数字。这样您就可以创建该级数。

以下是我们将求解级数和的输入/输出场景,其中第n项是数字n的平方和。这意味着它是一个平方数级数。

输入

n = 5

输出

55

解释

前4项的和 = 12 + 22 + 32 + 42 = 1 + 2+2 + 3+3+3 + 4+4+4+4 = 30

解决方案方法

让我们讨论这个问题的所有可能的解决方案:

有三种方法可以求解级数1 + 2 + 2 + 3 + 3 + 3 + .. + n的和。

  • 使用嵌套循环
  • 使用乘法
  • 使用数学公式

使用嵌套循环

解决这个问题的最简单方法是直接将级数中的数字加到n。这种方法需要嵌套循环,一个用于项,另一个用于每一项中的值。

这种方法很简单,但效率不高,因为它有两个嵌套循环,使得其时间复杂度为O(n2)

算法

  • 步骤1 − 循环 i -> 1 到 n。
  • 步骤2 − 在此循环内,循环 j -> 1 到 i。
  • 步骤3 − 然后,更新 sumVar,sumVar+=i;
  • 步骤4 − 打印 sumVar。

示例

以下是使用C++中嵌套循环求解级数1 + 2 + 2 + 3 + 3 + 3 + .. + n的和的程序:

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   for(int i = 1; i <= n; i++){
      for(int j = 1; j <= i; j++){
         sumVar += i;
      }
   }
   return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

输出

The sum of series till 7 is 140

使用乘法

有效的解决方案基于这样一个事实:如果一个数字(n)自身加n次,那么结果可以通过将该数字自乘来获得。

该解决方案更好,因为它只需要一个循环,时间复杂度为O(n)。但它并不是最佳解决方案,因为同样的问题可以用O(1)的时间复杂度来解决。

即 5+5+5+5+5 = 5*5。

因此,我们可以使用乘法而不是一个循环来解决这个问题。

算法

  • 步骤1 − 初始化 sumVal = 0;
  • 步骤2 − 循环 i -> 0 到 n。
  • 步骤3 − 更新 sumVal,sumVal += (i*i)

示例

以下是使用C++中乘法求解级数1 + 2 + 2 + 3 + 3 + 3 + .. + n的和的程序:

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   for(int i = 1; i <= n; i++){
      sumVar += (i*i);
   }
   return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

输出

The sum of series till 7 is 140

使用数学公式

有效的解决方案是使用给定级数和的通用公式。

级数和 = 1 + 2 + 2 + 3 + 3 + 3 + …. N。

这可以写成

1 + (2+2) + (3+3+3) + … + (N+N+N..N)
1*1 + 2*2 + 3*3 + … N*N.
12 + 22 + 32 + … N2.

平方和的公式是n*(n+1)*(2n+1)/6,我们也可以用这个公式求和。

示例

以下是使用C++中数学公式说明我们解决方案工作原理的程序:

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   sumVar = ((n*(n + 1)*( 2 * n + 1))/6 );
      return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

输出

The sum of series till 7 is 140

更新于:2024年5月22日

614 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.