首页 > 试题广场 >

疯狂序列

[编程题]疯狂序列
  • 热度指数:4814 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
东东从京京那里了解到有一个无限长的数字序列: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, ...(数字k在该序列中正好出现k次)。东东想知道这个数字序列的第n项是多少,你能帮帮他么

输入描述:
输入包括一个整数n(1 ≤ n ≤ 10^18)


输出描述:
输出一个整数,即数字序列的第n项
示例1

输入

169

输出

18
从1向上遍历结果会超时,可以用中学二次方程的公式解出,再向上取整即可。
import java.util.Scanner;
import java.lang.Math;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        long l=sc.nextLong();
        long result=(long) Math.ceil((Math.sqrt(8*l+1)-1)/2);
        
        System.out.print(result);
    }
}

发表于 2019-06-22 14:58:56 回复(0)