zoukankan      html  css  js  c++  java
  • 【CodeForces 622A】Infinite Sequence

    一个序列是1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5....这样排的,求第n个是什么数字。

    分析

    第n个位置属于1到k,求出k,然后n-i*(i-1)/2就是答案了。

    方法1:可以枚举k为i,当i*(i+1)/2大于等于n时,k就是i了。

    方法2:先让k=floor(sqrt(2*n)),如果k*(k+1)/2<n,那正确的k应该+1。

    代码

    方法1的写法1:

    #include<cstdio>
    int main()
    {
        long long n,i;
        scanf("%lld",&n);
        for(i=1; i<=1e8; i++)
        {
            if(i*(i+1)/2>=n) break;
        }
        printf("%lld",n-i*(i-1)/2);
        return 0;
    }

    方法1的写法2:

    #include<cstdio>
    int main()
    {
        long long n,i;
        scanf("%lld",&n);
        i=1;
        while(i*(i+1)/2<n)
        {
            i++;
        }
        printf("%lld",n-i*(i-1)/2);
        return 0;
    }

    方法2

    #include<cstdio>
    #include<cmath>
    
    int main()
    {
        long long n,k;
    
        scanf("%lld",&n);
        k=floor(sqrt(2*n));
        if (k*(k+1)/2<n)
        {
            k++;
        }
        printf("%lld",n-k*(k-1)/2);
        return 0;
    }
  • 相关阅读:
    sql基础笔记备忘
    论坛---挂掉的思考
    http response
    跑步肋骨下方疼
    Golang
    svn rollback: 恢复到上一版本
    中国时区
    crontab
    初识redis
    siege
  • 原文地址:https://www.cnblogs.com/flipped/p/5212556.html
Copyright © 2011-2022 走看看