首页 > 试题广场 >

疯狂序列

[编程题]疯狂序列
  • 热度指数:4885 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
东东从京京那里了解到有一个无限长的数字序列: 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
n=int(input())
x=(2*n+0.25)**0.5+0.5
print(int(x) if int(x)-x!=0 else int(x)-1)

发表于 2021-02-14 15:54:46 回复(0)
输入描述:
输入包括一个整数n(1 ≤ n ≤ 10^18)
输出描述:
输出一个整数,即数字序列的第n项

没读懂题目什么意思,怎么就扯到等差序列上了?(输入是一个n,输出第n项,所以输出跟输入到底什么关系啊,这个输入的n是序列的什么东西啊)
编辑于 2019-04-28 11:02:43 回复(0)
等差数列
import math
n = int(input())
result = int(math.sqrt(n * 2))
if (result + 1) * result * (1 / 2) < n:
    print(result + 1)
else:
    print(result)
发表于 2019-04-10 10:43:40 回复(0)
#用等差数列求和的方法确定n在哪一个区间范围。
class Solution:
    n=int(input())
    ans=0
    t=int((2*n)**(0.5))
    for i in range(t-1,t+1):
        if i*(i+1)/2<=n and (i+1)*(i+2)/2>n:
            if i*(i+1)/2<n:
                ans=i+1
            else:
                ans=i
            break
    print ans

发表于 2019-03-30 18:21:11 回复(2)
#等差数列求和公式
import math
while(True):
    try:
        n = int(input())
        temp = int(math.sqrt(2*n)) + 1
        while(temp>=1):
            if(temp * (temp + 1) == 2 * n):
                ans = temp
                break
            if((temp - 1) * temp < 2 * n and temp * (temp + 1) > 2 * n):
                ans = temp
                break
            temp -= 1
        print(ans)
    except:
        break

发表于 2019-03-27 14:29:15 回复(0)