이 문제에서는 정수 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