使用 C++ 查找系列 14、28、20、40、……的第 N 项

在这个问题中,我们得到一个整数值N.Our任务是找到系列的第 n 项-

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

让我们举个例子来理解这个问题,

输入

N = 6

输出

64

解决方法

要找到级数的第 N 项,我们需要找到级数的一般项。为此,我们需要密切观察该系列。我可以看到解决该系列的两种不同方法。

方法一

该系列是在偶数和奇数位置的两个不同系列的混合。

在奇数位置- 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 )} \右 )}$,其中值从 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<<"t级数的 h 项是 "<<findNthTermSeries(n);

   return 0;

}

输出结果
15t级数的 h 项是 776

另一种解决方案

另一种方法是,可以找到第 N 项,即当前项是前一项的两倍,或者根据它的偶数/奇数,它比前一项少 8 倍。

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

所以,我们需要从 2 循环到 N,并通过检查它是偶数还是奇数来找到 T i 。

示例

程序来说明我们的解决方案的工作原理,

#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<<"t级数的 h 项是 "<<findNthTermSeries(n);

   return 0;

}

输出结果
15t级数的 h 项是 776

以上是 使用 C++ 查找系列 14、28、20、40、……的第 N 项 的全部内容, 来源链接: utcz.com/z/297128.html

回到顶部