zoukankan      html  css  js  c++  java
  • [蓝桥杯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;
    }
    
  • 相关阅读:
    字符串的操作
    10.20 整理1
    if else; while; break;continue ----流程控制系列
    10.19 重新打了第一天的代码(课件))
    10.17
    svn,导入数据到版本库及使用工作副本
    mysql的反引号backtick
    css中的1px并不等于设备的1px
    onclick事件属性与在用js绑定onclick事件中的this的区别
    一次对CI框架update方法底层实现的探索之旅
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13184384.html
Copyright © 2011-2022 走看看