在 C++ 中查找斯特恩双原子序列的第 n 个元素
以下,我们将了解如何在斯特恩双原子序列中找到第 n 项。此序列类似于 0, 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, 4, … 这也称为模糊函数。此序列可以定义为:
𝑝(𝑛)=$p\lgroup\frac{n}{2}\rgroup$ 当 𝑛 为偶数时
𝑝(𝑛)=$p\lgroup\frac{n-1}{2}\rgroup+p\lgroup\frac{n+1}{2}\rgroup$ 当 𝑛 为奇数时
𝑝(0)=0 且 𝑝(1)=1
以下,我们将使用动态规划方法减少计算次数。在为 p(0) 和 p(1) 保存基本情况后,我们将从索引 i = 2 迭代到 n,并计算 p(i)
示例
#include<iostream> using namespace std; int findTerm(int n) { int table[n+1]; table[0] = 0; table[1] = 1; for (int i = 2; i <= n; i++) { if (i % 2 == 0) table[i] = table[i / 2]; else table[i] = table[(i - 1) / 2] + table[(i + 1) / 2]; } return table[n]; } int main() { cout << 3 << " rd term is: " << findTerm(3) << endl; cout << 15 << " th term is: " << findTerm(15) << endl; cout << 20 << " th term is: " << findTerm(20) << endl; }
输出
3 rd term is: 2 15 th term is: 4 20 th term is: 3
广告