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

C++で級数1+2 + 2 + 3 + 3 + 3 + ..+nの合計を求めるプログラム


この問題では、級数のn番目の項を示す数nが与えられます。私たちのタスクは、シリーズ1 + 2 + 2 + 3 +3 + 3 + ..+nの合計をC++で見つけるプログラムを作成することです

問題の説明 −ここで、n番目の項が数nの合計のn倍である級数の合計を求めます。これは、それが一連​​の平方数であることを意味します。

問題を理解するために例を見てみましょう

入力

n = 4

出力

30

説明

第4項までの級数の合計=1+ 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 =30

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

この問題の最も効果的な解決策は、級数の合計に一般式を使用することです。

しかし、考えられる問題のすべての可能な解決策について話し合いましょう。

最も簡単なソリューション 問題に直接、nまでの系列の数を追加することです。これには、2つのネストされたループが必要になります。1つはtermで、もう1つは各termの値の内側のループです。

アルゴリズム

初期化 − sumVar =0;

  • ステップ1 −ループfori->1からn。
    • ステップ1.1 −ループforj->1からi。
      • ステップ1.1.1 − sumVar、sumVar +=iを更新します;
  • ステップ2 −sumVarを印刷します。

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

#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

このソリューションは単純ですが、2つのネストされたループがあり、 O(n2)の順序の時間計算量になるため、効果的ではありません。 。

効果的なソリューション これは、number(n)がそれ自体にn回追加された場合に基づいています。次に、その数にそれ自体を掛けることで結果を得ることができます。

つまり、5 + 5 + 5 + 5 + 5 =5*5です。

したがって、問題を解決するために、1つのループの代わりに乗算を使用できます。

アルゴリズム

初期化 − sumVal =0;

  • ステップ1 −ループfori->0からn。
    • ステップ2 − sumVal、sumVal + =(i * i)を更新

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

#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つだけで、時間計算量がO(n)のオーダーであるため、このソリューションの方が優れています。ただし、O(1)時間計算量でも同じことができるため、これは最善の解決策ではありません。

最も効果的なソリューション 与えられた級数の合計に一般式を使用しています。

級数の合計=

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.

$ Sum =\ sum _ {\ square =1} ^ \ square \ blacksquare \ square ^ 2 $

二乗和の式はn*(n + 1)*(2n + 1)/6です。そして、この式を使用して合計を見つけることもできます。

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

#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

  1. シリーズ1、2、11、12、21のN番目の項をC++で検索するプログラム

    この問題では、番号Nが与えられます。私たちのタスクは、C++でシリーズ1、2、11、12、21…のN番目の項を見つけるプログラムを作成することです。 問題の説明 級数のN番目の項を見つけるには- 1、2、11、12、21、22、111、112、.... Nterms シリーズの総称を見つけます。 問題を理解するために例を見てみましょう 入力 N =8 出力 112 ソリューションアプローチ 一般的な用語を導き出すには、シリーズを注意深く観察する必要があります。このシリーズでは、値に1と2しかないことがわかります。そして、すべての用語は1と2の交互になります。したがって、一

  2. 算術級数の合計のためのC++プログラム

    「a」(第1項)、「d」(共通の差)、「n」(文字列内の値の数)が与えられ、タスクは級数を生成し、それによってそれらの合計を計算することです。 算術級数とは 算術級数は、シリーズの最初の項が「a」で固定され、それらの間の一般的な違いが「d」である、共通の違いを持つ数列です。 -として表されます a、a + d、a + 2d、a + 3d 、。 。 。 例 Input-: a = 1.5, d = 0.5, n=10 Output-: sum of series A.P is : 37.5 Input : a = 2.5, d = 1.5, n = 20 Output : sum of s