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
-
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
-
与えられたシーケンスの最長増加部分列を見つけるための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) 入力 :サブ配列と