笔试刷题-京东

本文介绍了一种解决无限序列中查找第N项的方法。序列由数字递增构成,每个数字重复自身次数。通过数学公式结合平方根运算,快速定位目标数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

/**
东东从京京那里了解到有一个无限长的数字序列: 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

输出例子1:
18
*/

思路如下:

找出最小的n, 使得n*(n+1)/2>=target
注意写法放置爆long long 这里求n有两种方法:1.二分查找 2.直接调用开方函数

代码如下:

#include<stdio.h>
#include<iostream>
#include<cmath>

using namespace std;

int main(){
    long long N;
    scanf("%lld", &N);
    long long sqrtN=sqrt(2*N);
    if(sqrtN*(sqrtN+1)<2*N)
        sqrtN++;
    printf("%lld\n", sqrtN);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值