Processing math: 100%

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

TN=Ts+6(2((N/2)1)),其中值从s到N,每次递增2。

对于偶数值,s = 2,

对于奇数值,s = 1。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例

Open Compiler
#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

示例

程序说明了我们解决方案的工作原理:

Open Compiler
#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 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告