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

シリーズ1^2-2 ^ 2 + 3 ^ 2-4 ^2...の合計をC++でn個まで検索


この問題では、整数値Nが与えられます。私たちのタスクは、シリーズ1 ^ 2-2 ^ 2 + 3 ^ 2--4 ^2...最大n項の合計を見つけることです

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

Input : N = 3
Output : 6

説明

12 - 22 + 32 = 1 - 4 + 9 = 6

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

この問題を解決する簡単な方法は、ループを使用することです。イテレータiを使用して1からnにループします。

iが奇数の場合は、(i 2 )合計に。

iが偶数の場合、減算(i 2 )合計に。最後に、ループの後に級数の合計を返します。

アルゴリズム

初期化 −合計=0。

  • ステップ1 −nまでループ、i->1からn

    • ステップ1.1 − iが奇数の場合、(i 2 )合計するには、if(i%2 ==0)=> sum + =i 2

    • ステップ1.2 − iが偶数の場合、(i 2 を追加します )合計するには、if(i%2 ==0)=> sum-=i 2

  • ステップ2 −合計を返します。

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

#include <iostream>
using namespace std;
int findSumOfSeries(int n) {
   int sum = 0;
   for (int i = 1; i <= n; i++) {
      if (i % 2 == 0)
         sum -= (i*i);
      else
         sum += (i*i);
   }
   return sum;
}
int main(void) {
   int n = 5;
   cout<<"The sum of series is "<<findSumOfSeries(n);
}

出力

The sum of series is 15

別のアプローチ 級数の合計に数式を使用しています。

Nが偶数の場合、

$ \ mathrm {sum \:=\:1 ^ 2 \:-\:2 ^ 2 \:+ \:3 ^ 2 \:-\:4 ^ 2 \:+ \:\ dotsm \:+ \ :( n-1)^ 2 \:-n ^ 2} $

$ \ mathrm {sum \:=\ :( 1-2)(1 + 2)\:+ \:(3-4)(3 + 4)\:+ \:\ dotsm(n-1-n)( n-1 + n)} $

$ \ mathrm {sum \:=\:(-1)(3)\:+ \:(-1)(7)\:+ \:(-1)(2n-1)} $

$ \ mathrm {sum \:=\:(-1)(1 + 2 + 3 + 4 + \ dotsm \:+(n-1)+ n)} $

$ \ mathrm {sum \:=\:(-1)\:* \:\ begin {bmatrix} \ frac {n *(n + 1)} {2} \ end {bmatrix}} $

Nが奇数の場合、

$ \ mathrm {sum \:=\:1 ^ 2 \:-\:2 ^ 2 \:+ \:3 ^ 2 \:-\:4 ^ 2 \:+ \:\ dotsm \:+ \ :( n-2)^ 2 \ :-( n-1)^ 2 \:+ \:n ^ 2} $

$ \ mathrm {sum \:=\:(1 ^ 2 \:-\:2 ^ 2 \:+ \:3 ^ 2 \:-\:4 ^ 2 \:+ \:\ dotsm \:+ \: (n-2)^ 2 \ :-( n-1)^ 2)\:+ \:n ^ 2} $

$ \ mathrm {sum \:=\:\ lbrace(-1)\:* [\ frac {n *(n + 1)} {2}] \ rbrace \:+ \:n ^ 2} $

>

$ \ mathrm {sum \:=\:(\ frac {-n ^ 2 \:+ \:n \:+ \:2n ^ 2} {2})} $

$ \ mathrm {sum \:=\:(n + n ^ 2)/ 2 \:=\:n ^ *(n + 1)/ 2} $

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

#include <iostream>
using namespace std;
int findSumOfSeries(int n) {
   int sum = 0;
   if(n % 2 == 0){
      sum = (-1)*(n*(n+1))/2;
   }
   else {
      sum = (n*(n+1))/2;
   }
   return sum;
}
int main(void) {
   int n = 5;
   cout<<"The sum of series is "<<findSumOfSeries(n);
}

出力

The sum of series is 15

  1. C++のツリーで最大のサブツリーの合計を検索します

    この問題では、二分木が与えられます。私たちのタスクは、ツリー内で最大のサブツリーの合計を見つけることです。 問題の説明: 二分木は、正の値と負の値で構成されます。そして、ノードの合計が最大のサブツリーを見つける必要があります。 問題を理解するために例を見てみましょう。 出力: 13 説明: 左サブツリーの合計は7です 右サブツリーの合計は1です ツリーの合計は13です ソリューションアプローチ この問題を解決するために、ポストオーダートラバーサルを実行します。ノードの左側のサブツリーと右側のサブツリーの合計を計算します。現在のノードについて、現在のノードの

  2. シリーズ23+45+75+…..最大N項の合計を求めるC++プログラム

    このチュートリアルでは、与えられたシリーズの合計を見つけるプログラムについて説明します23+45+75+…..最大N項。 このために、Nの値が与えられます。私たちのタスクは、最初の項から始まるすべての項を合計して、与えられた系列の合計を見つけることです。 これを解いた後、級数の合計の式を取得します; Sn =(2n(n + 1)(4n + 17)+ 54n)/ 6 例 #include <iostream> using namespace std; //calculating the sum of the series int calc_sum(int N) { &n