• 蓝精灵之小饭写数字


    蓝精灵之小饭写数字

    题目:

    蓝精灵之小饭写数字

    题面:

    有一个数列叫斐波那契数列,f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2),小饭有支大力金刚笔,能写n位数字,她想知道,如果从f(1)开始写,她能写到第几个斐波那契数。。比如n=20,那么她能写。11235813213455891442。。。第13个斐波那契数。如果n=1亿,问小饭能写到第几个斐波那契数?

    输入描述:

    输入数据有多组。
    输入一个整数n(0<n<1e8)。

    输出描述:

    输出答案。

    输入样例:

    20

    输出样例:

    13

    题解

    先用公式预处理出1e8个数需要多少个斐波那契数组成,然后求前缀和,二分查找合适的答案

    #include <cstdio>
    #include <cmath>
    typedef long long LL;
    LL ans[31000];
    int main() {
        LL cnt = 0;
        for(LL i = 1; cnt <= 100000000; i++) {
            LL result = (long long)((double)i * log10(0.5 + 0.5 * sqrt(5)) - log10(sqrt(5))) + 1;
            cnt += result;
            ans[i] = cnt;
        }
        LL sum, ans1, ans2;
        while(~scanf("%lld", &sum)) {
            LL l = 0, r = 30935, mid;
            while(r - l > 1) {
                mid = (l + r) / 2;
                if(ans[mid] <= sum && ans[mid + 1] >= sum) {
                    if(ans[mid] == sum) mid--;
                    break;
                }
                else if(ans[mid + 1] < sum) l = mid;
                else r = mid;
            }
            printf("%lld
    ", mid + 1);
        }
        return 0;
    }
    
    
  • 相关阅读:
    网络编程-Python的socket库
    Python -用虚拟环境保存库文件
    Python --文件的读写
    VIM--常用操作
    libpcap -学习1
    Python -装饰器
    C++ 关于map,function的简单应用
    UVAlive 3635 (13.08.23)
    C语言中的整型提升(integral promotion)
    [置顶] 从一位数组中提取最小k个元素
  • 原文地址:https://www.cnblogs.com/fanshhh/p/11377898.html
Copyright © 2020-2023  润新知