Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

시리즈의 합계 1 + (1+3) + (1+3+5) + (1+3+5+7) + + (1+3+5+7+....+(2n-1) ) C++에서

<시간/>

이 문제에서는 정수 n이 주어집니다. 우리의 임무는 1 + (1+3) + (1+3+5) + (1+3+5+7) + + (1+3+5+7+ 시리즈의 합을 찾는 프로그램을 만드는 것입니다. ....+(2n-1)).

이 급수에서 우리는 급수의 i번째 항이 처음 i번째 홀수의 합이라는 것을 관찰할 수 있습니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력

n = 3

출력

14

설명 - (1) + (1+3) + (1+3+5) =14

이 문제에 대한 간단한 해결책은 중첩 루프를 사용한 다음 모든 홀수를 합계 변수에 추가하는 것입니다. 그런 다음 합계를 반환합니다.

예시

솔루션의 작동을 설명하는 프로그램,

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   int sum = 0, element = 1;
   for (int i = 1; i <= n; i++) {
      element = 1;
      for (int j = 1; j <= i; j++) {
         sum += element;
         element += 2;
      }
   }
   return sum;
}
int main() {
   int n = 12;
   cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2"<<n<<"-1)) is "<<calcSeriesSum(n);
   return 0;
}

출력


Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*12-1)) is 650


이 접근 방식은 두 개의 중첩 루프를 사용하므로 효과적이지 않습니다.

보다 효율적인 접근 방식은 수학적으로 일반 공식을 찾아 급수의 합을 찾는 것입니다.

n개의 홀수의 합,

=(1) + (1+3) + (1+3+5) + … (1+3+5+... + 2n-1)

=n2

먼저 계열의 개별 요소를 나타내는 처음 n개의 홀수의 합을 보겠습니다.

시리즈 합계,

sum = (1) + (1+3) + (1+3+5) + … + (1+3+5+ … + 2n-1)
sum = ∑ (1+3+5+ … + 2n-1)
sum = ∑ n2
sum = [n * (n+1) * (2*n -1)]/6

예시

솔루션의 작동을 설명하는 프로그램,

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   return ( n*(n + 1)*(2*n + 1) )/6;
}
int main() {
   int n = 9;
   cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*"<<n<<"-1)) is "<<calcSeriesSum(n);
return 0;
}

출력

Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*9-1)) is 285