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

C++에서 주어진 시퀀스의 합을 찾는 프로그램

<시간/>

이 문제에서는 급수에 대해 두 개의 숫자 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

솔루션 접근 방식

간단한 해결책은 반복을 사용하여 합을 찾는 것입니다. 각 항에 대해 하나씩, 항의 값을 찾는 데 두 번째 루프를 사용합니다. 그런 다음 각 항의 값을 더하여 결과를 얻습니다.

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

예시

#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