九度OJ 1357:疯狂地Jobdu序列 (数字特性)

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:715

解决:263

题目描述:

阳仔作为OJ的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样的序列:

1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 ……

即大小为k的数字,正好会在序列中连续重复k次。写到这里,阳仔兴奋了,但是他不知道这种序列叫什么名字,那就暂时叫它jobdu疯狂序列好了。现在阳仔想让你解决一个问题是,假如给你一个整数n,你能说出这个序列中,第n个元素的大小是多少么? 记住,速度要快哦,亲~

输入:
每个测试文件包含多个测试案例,每个测试案例只有一行,即整数n,1 <= n <= 10^18,代表要查找的第n个元素。
输出:
对于每个测试案例,输出疯狂的jobdu序列中的第n个元素。
样例输入:
1
2
3
4
5
样例输出:
1
2
2
3
3
提示:

输入较大,不建议使用cin读入输入数据。


代码:

#include <stdio.h>
#include <math.h>
 
#define N 1000
 
int main(void)
{
    long long n;
    long long m, a, b, res;
 
    while (scanf("%lld", &n) != EOF)
    {
        m = sqrt(2*n);
        a = m*(m+1)/2;
        b = (m+1)*(m+2)/2;
        if (n <= a)
            res = m;
        else if (n <= b)
            res = m+1;
        else
            res = m+2;
        printf("%lld\n", res);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1357
    User: liangrx06
    Language: C
    Result: Accepted
    Time:40 ms
    Memory:928 kb
****************************************************************/


转载于:https://www.cnblogs.com/liangrx06/p/5083777.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值