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;
    }
  • 相关阅读:
    CTF简介
    最先与最后
    记一次某校版facemash的搭建
    ipv6入门
    win10开启IPv6的两种方法
    安装 Go 1.11 在 Ubuntu 18.04 & 16.04 LTS
    python开发者的AsyncIO
    Python 异步--Await the Future
    Python元类
    alias 和 unalias 命令
  • 原文地址:https://www.cnblogs.com/flipped/p/5212556.html
Copyright © 2011-2022 走看看