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

更新于: 2024年5月22日

685 次查看

开启你的职业生涯

通过完成课程获得认证

开始学习
广告