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

C++에서 Stern의 이원자 시리즈에서 n번째 요소 찾기

<시간/>

여기서는 Stern의 이원자 급수에서 n번째 항을 찾는 방법을 살펴보겠습니다. 계열은 0, 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, 4, … 이 계열은 다음과 같이 정의할 수 있습니다. -

𝑝(𝑛)=$p\lgroup\frac{n}{2}\rgroup$ 𝑤ℎ𝑒𝑛 𝑛 𝑖𝑠 𝑒𝑣𝑒𝑛

𝑝(𝑛)=$p\lgroup\frac{n-1}{2}\rgroup+p\lgroup\frac{n+1}{2}\rgroup$ 𝑤ℎ𝑒𝑛 𝑛 𝑖𝑠 𝑜𝑑𝑑

𝑝(0)=0 𝑎𝑛𝑑 𝑝(1)=1

여기서 우리는 계산 수를 줄이기 위해 동적 프로그래밍 접근 방식을 사용할 것입니다. p(0) 및 p(1)에 대한 기본 사례를 저장한 후 인덱스 i =2에서 n까지 반복하고 p(i)

예시

#include<iostream>
using namespace std;
int findTerm(int n) {
   int table[n+1];
   table[0] = 0;
   table[1] = 1;
   for (int i = 2; i <= n; i++) {
      if (i % 2 == 0)
         table[i] = table[i / 2];
      else
         table[i] = table[(i - 1) / 2] + table[(i + 1) / 2];
   }
   return table[n];
}
int main() {
   cout << 3 << " rd term is: " << findTerm(3) << endl;
   cout << 15 << " th term is: " << findTerm(15) << endl;
   cout << 20 << " th term is: " << findTerm(20) << endl;
}

출력

3 rd term is: 2
15 th term is: 4
20 th term is: 3