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

C++를 사용하여 급수 14, 28, 20, 40,…..의 N번째 항 찾기

<시간/>

이 문제에서 정수 값 N이 주어집니다. 우리의 임무는 급수의 n번째 항을 찾는 것입니다. -

14, 28, 20, 40, 32, 64, 56, 112…

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

입력

N = 6

출력

64

솔루션 접근 방식

계열의 N번째 항을 찾으려면 급수의 일반 항을 찾아야 합니다. 시리즈를 면밀히 관찰해야 하는 이유입니다. 나는 시리즈를 푸는 두 가지 다른 방법을 볼 수 있습니다.

방법 1

시리즈는 짝수 위치와 홀수 위치에 있는 두 개의 서로 다른 시리즈가 혼합된 것입니다.

이상한 위치에서 − 14, 20, 32, 56, ….

T1 = 14
T3 = 20 = T1 + 6
T5 = 32 = T3 + 12
T7 = 56 = T5 + 24 = T1 + 6 + 12 + 24 = T1 + 6*(1 + 2 + 4)
TN = T1 + 6(20 + 21 + 22 +....+ 2((N/2) - 1 ) )

짝수 위치에서 − 28, 40, 64, 112…

T2 = 28
T4 = 40 = T2 + 12
T6 = 64 = T4 + 24
T8 = 112 = T6 + 48 = T2 + 12 + 24 + 48 = T2 + 6*(2 + 4 + 8)
TN = T2 + 6(21 + 22 +....+ 2((N/2) - 1 ) )

시리즈의 N번째 항은

$\mathrm{T_{N}\, =\, T_{s}\, +\, 6\left ( \sum 2^{\left ( \left ( N/2 \right )-1 \right )} \ right )}$ , 여기서 값은 s에서 N까지 2씩 증가합니다.

짝수 값의 경우 s =2,

홀수 값의 경우 s =1.

예시

#include <iostream>
#include <math.h>
using namespace std;
long findNthAdd(int s, int i, int n){
   int sum = 0;
   for(; i <= n; i+= 2){
      sum += pow(2, (int)((i/2) - 1));
   }
   return 6*sum;
}
long findNthTermSeries(int n){
   int s, i;
   if(n % 2 == 0){
      s = 28;
      i = 4;
   }
   else{
      s = 14;
      i = 3;
   }
   return ( s + findNthAdd(s, i, n));
}
int main(){
   int n = 15;
   cout<<n<<"th term of the series is "<<findNthTermSeries(n);
   return 0;
}

출력

15th term of the series is 776

또 다른 솔루션

N 번째 항을 찾을 수 있는 또 다른 방법은 현재 항이 이전 항의 두 배이거나 짝수/홀수를 기준으로 이전 항보다 8 적은 값이라는 사실을 사용하는 것입니다.

If N is even TN = 2*T(N-1)
If N is odd TN = T(N-1) - 8

그래서 우리는 2에서 N까지 루프를 돌고 Ti를 찾아야 합니다. 짝수인지 홀수인지 확인하여.

예시

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

#include <iostream>
using namespace std;
bool isEven(int N){
   if(N % 2 == 0)
      return true;
   return false;
}
int findNthTermSeries(int n){
   int TermN = 14;
   for (int i = 2; i <= n; i++) {
      if (isEven(i))
         TermN *= 2;
      else
         TermN -= 8;
   }
   return TermN;
}
int main(){
   int n = 15;
   cout<<n<<"th term of the series is "<<findNthTermSeries(n);
   return 0;
}

출력

15th term of the series is 776