C++ 程序在序列 1 2 2 3 3 3 4 中找到第 n 项!
在这个问题中,我们得到一个整数N。任务是在序列1223334...中找到第n项。
让我们举个例子来理解这个问题,
输入
N = 6输出结果
3
解释
到第n项的级数是1,2,2,3,3,3,...
解决方法
解决问题的一个简单方法是使用嵌套循环。外部for循环是从1到n。内循环是从1到i(外循环的迭代器)。对于内循环中的每次迭代,计算系列的元素数量,并在count等于n时返回i的值。
解决问题的更有效方法是使用模式位置。序列的元素与它们在系列中的位置是-
Element 1: position 1 Element 2: position 2, 3 Element 3: position 4, 5, 6 Element 4: position 7, 8, 9, 10
对于这些值,我们可以使用系列中元素的最后一个位置创建一个系列,即,
1, 3, 6, 10, 15, 21, 28, ….
x出现在术语中,1+2+3+...+(x-2)+(x-1)...
这可以概括为n=x*(x-1)/2
2n=x2-x=>x2-x-2n=0
使用求解二次方程的公式求解方程,
$$x=1/2*(1+\sqrt{1+8*n)}$$
程序来说明我们的解决方案的工作,
示例
#includeusing namespace std; int findNthTerm(int n) { int x = (((1) + (double)sqrt(1 + (8 * n))) / 2); return x; } int main(){ int n = 12; cout<<"The series is 1, 2, 2, 3, 3, 3, 4, 4, ...\n"; cout< 输出结果 The series is 1, 2, 2, 3, 3, 3, 4, 4, ... 12t该系列的h项是 5