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
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP