C++程序:求给定序列的和
本文给定两个数字 n 和 k,表示一个序列。我们的任务是创建一个 C++ 程序,找出下面给定序列的和。
输入循环是将给定序列中的所有数字加起来以获得单个输出的过程。递归过程在数学中经常使用,并且可以使用序列来实现,例如算术序列(每个项都是通过在先前项之间添加一个常数差得到的)和几何序列(其中每个项都乘以前一项的常数比率)。
序列为:
(1*2*3*...*k) + (2*3*...k*(k+1)) + (3*4*...*k*k+1*k+2) + ((n-k+1)*(nk+ 2)*... *(n-k+k).
以下是根据给定的 k 值找到给定序列直到第 n 项的和的**输入和输出场景**。
输入
n = 4, k = 3
输出
30
解释
(1*2*3*....*k) + (2*3*....k*(k+1)) Series: (1*2*3) + (2*3*4) = 30
解决方案方法
一个简单的解决方案是使用迭代找到总和。我们将使用两个循环,一个用于每个项,第二个用于查找项的值。然后将每个项的值加起来以获得结果。
这个问题有两种方法:
- 使用嵌套循环
- 使用单循环
使用嵌套循环
示例
以下是使用 C++ 中的嵌套循环查找给定序列和的程序:
#include <iostream> using namespace std; int findSeriesSum(int n, int k){ int sumVal = 0, term = 1; for(int i = 1; i <= (n-k + 1); i++){ term = 1; for(int j = i; j< (k+i); j++){ term *= j; } sumVal += term; } return sumVal; } int main(){ int n = 4; int k = 3; cout<<"Sum of the series is: "<<findSeriesSum(n, k); return 0; }
输出
Sum of the series is: 30
使用单循环
让我们看看给定问题的另一个解决方案。我们将尝试一种更有效的方法,避免嵌套循环并提高时间复杂度。
示例
下面是使用 C++ 编写的程序,该程序使用单个(无嵌套)循环查找给定序列的和:
#include <iostream> using namespace std; int findSeriesSum(int n, int k){ int sumVal = 1; for(int i = n+1; i > n-k; i--) sumVal *= i; sumVal /= (k + 1); return sumVal; } int main(){ int n = 4; int k = 3; cout<<"Sum of the series is: "<<findSeriesSum(n, k); return 0; }
输出
Sum of the series is: 30
广告