C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で与えられたシーケンスの合計を見つけるプログラム


この問題では、系列に対して2つの数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

説明

Series: (1*2*3) + (2*3*4) = 30

ソリューションアプローチ

簡単な解決策は、反復を使用して合計を見つけることです。 2つのループを使用します。1つは各用語に、もう1つは用語の値を見つけるために使用します。次に、各項の値を加算して結果を取得します。

ソリューションの動作を説明するプログラム

#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, k = 3;
   cout<<"The sum of series is "<<findSeriesSum(n, k);
   return 0;
}

出力

The sum of series is 30

このソリューションは、次数O(n 2 の時間の複雑さを生み出すネストされたループを必要とするため、効率的ではありません。 。

効率的なソリューション シリーズの一般式を使用している可能性があります。式は、

$ \ frac {(\ square + 1)* \ square *(\ square-1)*(\ square-2)* .... *(\ square- \ square + 1)} {\ square + 1} $

ソリューションの動作を説明するプログラム

#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, k = 3;
   cout<<"The sum of series is "<<findSeriesSum(n, k);
   return 0;
}

出力

The sum of series is 30

  1. 2つの特定のノード間にパスが存在するかどうかを確認するC++プログラム

    これは、指定された2つのノード間にパスが存在するかどうかを確認するC++プログラムです アルゴリズム Begin    function isReach() is a recursive function to check whether d is reachable to s:    A) Mark all the vertices as unvisited.    B) Mark the current node as visited and enqueue it and it will be used to get all ad

  2. 与えられたシーケンスの最長増加部分列を見つけるためのC++プログラム

    最長増加部分列は、1つの項目が前の項目よりも大きい部分列です。 ここでは、整数のセットから最長増加部分列の長さを見つけようとします。 Input: A set of integers. {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15} Output: The length of longest increasing subsequence. Here it is 6. The subsequence is 0, 2, 6, 9, 13, 15. アルゴリズム longestSubSeq(subarray、n) 入力 :サブ配列と