C++ 程式:查詢數列 0, 2, 1, 3, 1, 5, 2, 7, 3... 的第 N 項


在這個問題中,我們給定一個數字 N。我們的任務是建立一個 C++ 程式來查詢數列 0, 2, 1, 3, 1, 5, 2, 7, 3... 的第 N 項。

問題描述 − 我們給定以下數列:

0, 2, 1, 3, 1, 5, 2, 7, 3... 第 N 項

為了找到這個數列的第 N 項,我們將推匯出數列的通項公式,然後找到第 N 項。

讓我們舉個例子來理解這個問題:

輸入 − N = 7

輸出 − 2

解決方案

為了解決問題並找到數列的通項公式,我們需要仔細觀察這個數列,因為它包含了兩個不同的子數列。這種型別的數列一開始可能有點令人困惑,但一旦你意識到它是一個混合數列,你就會發現找到通項公式很容易。

這裡,有兩個子數列,一個在偶數索引位置,另一個在奇數索引位置。讓我們分別看看它們。

偶數索引子數列:0, 1, 1, 2, 3, …

奇數索引子數列:2, 3, 5, 7, …

現在,你應該清楚地看到偶數子數列是斐波那契數列。而奇數子數列是素數序列。

所以,數列是:

如果 N 是奇數,則為 (N/2) 索引的斐波那契數列。

如果 N 是偶數,則為 (N/2) 索引的素數。

程式演示了我們解決方案的工作原理:

#include<iostream>
using namespace std;
int findNthPrimeTerm(int n) {

int primeCount = 0;
for (int i = 2; ; i++) {
int isPrime = 1;
for (int j = 2; j <= (i/2); j++) {
if (i % j == 0) {
isPrime = 0;
break;
}
}
if (isPrime)
primeCount++;
if (primeCount == n) {
return i;
break;
}
}
return -1;
}
int FibonaciiNthTerm(int n)
{
int nthTerm = 1, last = 0;
int i;
if( n == 0)
return 0;
else if( n == 1)
return 1;
else{
for (i = 2; i <= n; i++) {
nthTerm += last;
last = nthTerm - last ;
}
return nthTerm;
}
}
int findNTerm(int N) {

if (N % 2 == 0)
return findNthPrimeTerm(N/2);
else {
return FibonaciiNthTerm(N/2);
}
}
int main()
{
int N = 13;
cout<<N<<"th term of the series is "<<findNTerm(N)<<endl;
N = 4;
cout<<N<<"th term of the series is "<<findNTerm(N);
return 0;
}

輸出

13th term of the series is 8
4th term of the series is 3

更新時間: 2020年10月3日

126 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.