时长两年半的某 2021-10-22 20:46 采纳率: 70.6%
浏览 189
已结题

一题简单的oj好题大一

img

  • 写回答

4条回答 默认 最新

  • 广大菜鸟 2021-10-23 20:37
    关注

    普通版本:O(n)

    
    #include<iostream>
    #define MAXSIZE 40
    using namespace std;
    
    //double 精度高,有效数字 15-16 位,float 精度低,有效数字 6-7位,
    //但是 double 消耗的内存是 float 的两倍,
    //运算速度比 float 慢得多,建议能用 float 保证精度的就用 float,少用 doubledouble Array[MAXSIZE];//先用double的看能不能过时间,不能就该用float
    
    void init() {
        //递归比迭代花费的时间会比较长
        for (int i = 0; i < MAXSIZE; i++) {
            Array[i] = i <= 1 ? 1 : Array[i - 1] + Array[i - 2];
        }
    }
    int main() {
        init();//一次生成,不再递归
        int n,i;
        double result;
        while (cin >> n) {
            result = 0;
            for (i = 0; i < n; i++) {
                result += Array[i + 2] / Array[i+1];
            }
            printf("%.6lf\n", result);//保持六位小数
        }
    }
    

    优化版本 O(1)

    #include<iostream>
    #define MAXSIZE 40
    using namespace std;
    //double 精度高,有效数字 15-16 位,float 精度低,有效数字 6-7位,
    //但是 double 消耗的内存是 float 的两倍,
    //运算速度比 float 慢得多,建议能用 float 保证精度的就用 float,少用 doubledouble Array[MAXSIZE];//先用double的看能不能过时间,不能就该用float
    //double resultItems[MAXSIZE];
    double resultComSum[MAXSIZE-1];//这里最大的为38个>题意的36,够用,1-37使用范围
    void init() {
        //递归比迭代花费的时间会比较长
        double tmp=0;
        for (int i = 0; i < MAXSIZE; i++) {
            Array[i] = i <= 1 ? 1 : Array[i - 1] + Array[i - 2];
            if (i > 1) {
                //resultItems[i - 2] = Array[i] / Array[i - 1];  
                tmp += Array[i] / Array[i - 1];
                resultComSum[i -1] = tmp;
            }
        }
    }
    int main() {
        init();//一次生成,不再递归
        int n;
        double result;
        while (cin >> n) {
            result = resultComSum[n];
            printf("%.6lf\n", result);//保持六位小数
        }
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 提问应符合社区要求 10月23日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?