📌  相关文章
📜  在系列1 2 2 3 3 3 4 4 4 4…中找到第n个项。

📅  最后修改于: 2021-05-06 18:42:53             🧑  作者: Mango

给定级数1 2 2 3 3 3 4 4 4 4…。,找到级数的n个项。 “模式”是显而易见的。有一个“ 1”,两个“ 2”,三个“ 3”,依此类推。

例子:

Input : n = 5 
Output : 3

Input :  n = 7
Output : 4

一个幼稚的方法是运行两个循环,一个从1到n,另一个从1到i,并且对于内部循环的每次迭代都保留一个计数,只要计数达到n,我们就可以脱离两个循环,而我将成为我们的答案。
时间复杂度: O(n)

一种有效的方法是记下一个小的观察结果:
诀窍是找到一种模式。
考虑对给定序列编号,如下所示:
1在位置1
2在位置2、3
3在位置4、5、6
4位于位置7、8、9、10
等等…
请注意,各个值的最后位置形成一个序列。
1,3,6,10,15,21 …
如果我们要为“第n个”项指定一个公式,请从相反的角度来看它。数字“ n”第一次出现在哪个术语中?将第一个项设为“第0个”项。 “ 1”出现在术语0中,“ 2”出现在术语1中,“ 3”出现在术语1 + 2 = 3中,“ 4”出现在术语1 + 2 + 3 = 6中,依此类推。以数字“ x”开头在项1 + 2 +…+(x-2)+(x-1)= x(x-1)/ 2中出现。
因此,求解第n个项,我们得到n = x *(x-1)/ 2
使用二次方程式求解,我们得到

在每种情况下,n都不是整数,这意味着第n个数字不是相同整数序列的第一个,但很显然第n个整数是整数值。

C++
// CPP program to find the nth term of the series
// 1 2 2 3 3 3 ...
#include 
using namespace std;
 
// function to solve the quadratic equation
int term(int n)
{
    // calculating the Nth term
    int x = (((1) + (double)sqrt(1 + (8 * n))) / 2);
    return x;
}
 
// driver code to check the above function
int main()
{
    int n = 5;
    cout << term(n);
    return 0;
}


Java
// Java program to find the nth
// term of the series 1 2 2 3 3 3 ...
import java.io.*;
 
class Series {
     
    // function to solve the quadratic
    // equation
    static int term(int n)
    {
        // calculating the Nth term
        int x = (((1) + (int)Math.sqrt(1 +
                           (8 * n))) / 2);
        return x;
    }
     
    // driver code to check the above function
    public static void main (String[] args) {
        int n = 5;
        System.out.println(term(n));
    }
}
 
// This code is contributed by Chinmoy Lenka


Python3
# Python program to find the nth term
# of the series 1 2 2 3 3 3 ...
import math
 
# function to solve the quadratic equation
def term( n ):
 
    # calculating the Nth term
    x = (((1) + math.sqrt(1 + (8 * n))) / 2)
    return x
 
# Driver code
n = 5
print(int(term(n)))
 
# This code is contributed by Sharad_Bhardwaj.


C#
// C# program to find the nth
// term of the series 1 2 2 3 3 3 ...
using System;
 
class Series
{
    // function to solve the quadratic
    // equation
    static int term(int n)
    {
        // calculating the Nth term
        int x = (((1) + (int)Math.Sqrt(1 + (8 * n))) / 2);
        return x;
    }
 
    // driver code to check the above function
    public static void Main()
    {
        int n = 5;
        Console.WriteLine(term(n));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


输出:

3

时间复杂度:O(log(n)),因为sqrt函数采用O(log n)。