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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP