• [蓝桥杯2019初赛]


    题意:中文题,自行理解。

    题目链接:http://oj.ecustacm.cn/problem.php?id=1478

    之后查了发现:
    相邻两个斐波那契数的比值是随着序号的增加逐渐趋于黄金分割比。即f(n)/f(n+1)-→0.618…。
    原来这是一个规律,我之前复习斐波那契怎么没复习到!!!

    PS:这题我没有思路,查了发现就是个裸的直接输出看结果题目,可是我做的时候是真的不知道从何入手。

    输出一部分看看:

    printf("%d %.8lf
    ",x++,f[i-1]*1.0/f[i]);
    // 有个小技巧,做题可以用:不用再去开一个for循环去输出f[i]/f[i+1],而是直接在第一个循环中对式子进行变形写成f[i-1]*1.0/f[i]即可,还需要注意x从几开始,可以和样例对照着看。
    
    2 0.50000000
    3 0.66666667
    4 0.60000000
    5 0.62500000
    6 0.61538462
    7 0.61904762
    8 0.61764706
    9 0.61818182
    10 0.61797753
    11 0.61805556
    12 0.61802575
    13 0.61803714
    14 0.61803279
    15 0.61803445
    16 0.61803381
    17 0.61803406
    18 0.61803396
    19 0.61803400
    20 0.61803399
    21 0.61803399
    22 0.61803399
    23 0.61803399
    24 0.61803399
    25 0.61803399
    26 0.61803399
    27 0.61803399
    28 0.61803399
    29 0.61803399
    30 0.61803399
    31 0.61803399
    32 0.61803399
    33 0.61803399
    34 0.61803399
    35 0.61803399
    36 0.61803399
    37 0.61803399
    38 0.61803399
    39 0.61803399
    40 0.61803399
    41 0.61803399
    42 0.61803399
    43 0.61803399
    44 0.61803399
    45 0.61803399
    46 0.61803399
    47 0.61803399
    48 0.61803399
    49 0.61803399
    

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    ll f[25];
    
    int main()
    {
        int n;
        cin>>n;
        f[1]=1,f[2]=1;
        int x=2;
        for(int i=3; i<=25; i++)
        {
            f[i]=f[i-1]+f[i-2];
            //printf("%d %.8lf
    ",x++,f[i-1]*1.0/f[i]);
        }
        if(n>=20)
            cout<<"0.61803399"<<endl;
        else
            printf("%.8lf
    ",f[n]*1.0/f[n+1]);
        return 0;
    }
    

    注意

    因为我只试了一组数据就是样例,导致代码一直不对,后来测一下数据发现是cout的问题,以前从来没有注意过这个问题,以为cout就是直接输出没有任何格式。
    于是,我今天找bug找了好久。
    这里说明一下,
    C++默认流的输出有效位是6位。
    所以我直接输出cout<<0.61803399<<endl这样子,是得不到正确答案的,只会输出0.618034。

    cout格式化输出小数点后位数

    #include <iomanip>  头文件
    std::cout<<std::fixed<<std::setprecision(8)<<1.23456789123456<< std::endl;  控制输出位数8位的格式,这个之前用过,不好记,还是printf控制。
    

    出错代码部分

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main()
    {
        cout<<"0.61803399"<<endl; // 0.61803399
        cout<<0.61803399<<endl; // 0.618034
        return 0;
    }
    
  • 相关阅读:
    自动机
    C语言文法
    实验报告一:词法分析
    Python的基础综合练习
    Python基础综合练习
    turtle画五星红旗
    熟悉常用的Linux操作
    大数据概述
    对学习编译原理的看法
    LINUX
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13184384.html
Copyright © 2020-2023  润新知