使用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

另一種解決方案

另一種方法是利用以下事實:當前項要麼是前一項的兩倍,要麼是前一項減去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

更新於:2022年2月14日

270 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告