0
点赞
收藏
分享

微信扫一扫

Python爬虫案例七:抓取南京公交信息数据并将其保存成excel多表形式

和谐幸福的人生 2024-09-13 阅读 24
算法

问题如下:

链接:疯狂序列_京东笔试题_牛客网

[编程题]疯狂序列

  • 热度指数:149 时间限制: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

解答:

def find_nth_term(n):
    # 二分查找的范围
    low, high = 1, 2
    # 找到高值范围
    while high * (high + 1) // 2 < n:
        low = high
        high *= 2

    # 进行二分查找
    while low < high:
        mid = (low + high) // 2
        if mid * (mid + 1) // 2 < n:
            low = mid + 1
        else:
            high = mid

    return low


# 读取输入
n = int(input().strip())
print(find_nth_term(n))

运行结果:

举报

相关推荐

0 条评论