zoukankan      html  css  js  c++  java
  • 1049. 数列的片段和(20)

    原题: https://www.patest.cn/contests/pat-b-practise/1049

    思路:

    1. a                               = a
    2. a+(a+2b)                        = 2a+2b
    3. a+(a+2b)+(a+2b+3c)              = 3a+4b+3c
    4. a+(a+2b)+(a+2b+3c)+(a+2b+3c+4d) = 4a+6b+6c+4d
    

    左边的规律显而易见, 累加即可. 右边的规律我参考了网友的实现, 才明白.
    比如现在n=4, i=1, 4a = a * n-i+1 * i, 后面的类推.

    本题我最郁闷的就是使用累加的方案, 测试点2始终无法AC, 估计是精度的原因
    但我实在看不出, 精度怎么错了, 如有大神明白, 望告知, 不胜感激!

    前些天, 在牛客上看一个算法直播, 主播现场做了一道Google给出的算法题,
    让我惊叹的是最后他提交的时候, 直接从Google服务器上下载一个文件, 这个
    文件就是全部的输入, 然后使用C语言操作文件生成一个文件输出, 最后提交
    这个输出文件, 到服务器端验证. 现在想想这个功能太TM有用了, 比如现在
    这题, 我是真想知道到底那组输入数据, 累加和累乘得到的结果不一样!!!

    累乘实现1 (AC):

    #include <stdio.h>
    
    int main (void) {
        int n;
        double sum = 0.0;
        double tmp;
        int i;
        scanf("%d", &n);
        for (i = 1; i <= n; i++) {
            scanf("%lf", &tmp);
            sum += tmp * (double)(n - i + 1) * (double)(i);
        }
        printf("%.2f
    ", sum);
    
        return 0;
    }
    
    

    累加实现2 (测试点2不过):

    #include <stdio.h>
    
    int main (void) {
        int n;
        double inc = 0.0;
        double sum = 0.0;
        double tmp;
        int i;
        scanf("%d", &n);
        for (i = 1; i <= n; i++) {
            scanf("%lf", &tmp);
            inc += (double)(i) * tmp;
            sum += inc;
        }
        printf("%.2f
    ", sum);
    
        return 0;
    }
    
    
  • 相关阅读:
    尾递归
    Appium环境搭建
    虚拟机与主机的相互访问,虚拟机访问外网
    Python
    npm i 安装
    redis过期键删除策略
    Redis的过期策略和内存淘汰机制
    redis的两种持久化方案
    JVM 方法内联
    进程/线程/协程
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7988623.html
Copyright © 2011-2022 走看看