zoukankan      html  css  js  c++  java
  • 蓝精灵之小饭写数字

    蓝精灵之小饭写数字

    题目:

    蓝精灵之小饭写数字

    题面:

    有一个数列叫斐波那契数列,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;
    }
    
    
  • 相关阅读:
    element-ui的气泡确认框
    ES6 检测数组中是否存在满足某些条件的元素实现方式
    P6788 「EZEC-3」四月樱花
    Codeforces Global Round 10(CF1392)
    Ynoi2019模拟赛
    谷粒学院项目分享(源码+资料+课件)全部齐全
    安装最新版NUXT
    LibreOJ #6284
    LibreOJ #6283
    LibreOJ #6282
  • 原文地址:https://www.cnblogs.com/fanshhh/p/11377898.html
Copyright © 2011-2022 走看看