zoukankan      html  css  js  c++  java
  • 51 Nod 1350 斐波那契表示

                                1350 斐波那契表示
    每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3)。定义G(n) = F(1) + F(2) + F(3) + ...... F(n),G(6) = 1 + 1 + 1 + 2 + 1 + 2 = 8。给出若干个数字n,求对应的G(n)。
    Input
    第1行:一个数T,表示后面用作输入测试的数的数量(1 <= T <= 50000)。
    第2 - T + 1行:每行1个数n(1 <= n <= 10^17)。
    Output
    输出共T行:对应每组数据G(n)的值。
    Input示例
    3
    1
    3
    6
    Output示例
    1
    3
    8

    思路:打表找规律
       
    G(n)的排列显然是有规律的,
       他是按照斐波那契数列对应的数分层,
       第一层是G(1)(只有一个数),第二层是G(2)(只有一个数),
       第三层是G(3)、G(4)(两个数),第四层三个数,第五层五个数,第六层八个数......依次类推
       
    规律是后一层的G(n)共有fib(n)个的话,G(n)的前fib(n-1)个与之前一层完全相同,
       后fib(n)-fib(n-1)个等于前一层前fib(n)-fib(n-1)个对应的数加一
     1 #include <cstdio>
     2 #include <cctype>
     3 #include <algorithm>
     4 #define MAXN 1000
     5 
     6 int n,m,sum;
     7 
     8 int f[MAXN];
     9 
    10 int hh() {
    11     f[0]=0;f[1]=1;
    12     for(int i=2; i<=40; ++i) f[i]=f[i-1]+f[i-2];
    13     
    14     for(int t,s,x,i=1; i<=90; ++i) {
    15         printf("F[%d] : ",i);
    16         t=i;s=1;
    17         int x=std::upper_bound(f+1,f+1+40,t)-f;
    18         t-=f[x-1];
    19         if(!t) {
    20             printf("%d ",s);
    21             printf("G[%d] : %d
    ",i,sum+s);
    22             sum+=s;
    23             continue;
    24         }
    25         for(int j=x-2; j; --j) {
    26             if(t-f[j]>=0) t-=f[j],++s;
    27             if(!t) break;
    28         }
    29         printf("%d ",s);
    30         printf("G[%d] : %d
    ",i,sum+s);
    31         sum+=s;
    32     }
    33     
    34     return 0;
    35 }
    36 
    37 int sb=hh();
    38 int main(int argc,char**argv) {;}
    打表
    代码
  • 相关阅读:
    pgspider sqlite mysql docker 镜像
    pgspider docker 镜像
    pgspider基于pg 的高性能数据可视化sql 集群引擎
    diesel rust orm 框架试用
    golang 条件编译
    Performance Profiling Zeebe
    bazel 学习一 简单java 项目运行
    一个好用node http keeplive agnet
    gox 简单灵活的golang 跨平台编译工具
    mailhog 作为smtp server mock工具
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7724948.html
Copyright © 2011-2022 走看看