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

    1049 数列的片段和 (20 分)

    给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。

    给定正整数数列,求出全部片段包含的所有的数之和。如本例中 10 个片段总和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

    输入格式:

    输入第一行给出一个不超过 105​​ 的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以空格分隔。

    输出格式:

    在一行中输出该序列所有片段包含的数之和,精确到小数点后 2 位。

    输入样例:

    4
    0.1 0.2 0.3 0.4
    

    输出样例:

    5.00

    刚开始想的是暴力法,超时了
    #include<iostream>
    using namespace std;
    int main()
    {
        int n;
        double arr[10005];
        scanf("%d",&n);
        for(int i=0; i<n; i++){
            scanf("%lf",&arr[i]);
        }
        double sum = 0;
        for(int i=0; i<n; i++){
            sum += arr[i];
            for(int j=i+1; j<n; j++){
                for(int k=i; k<j+1; k++){
                    sum += arr[k];
                }
            }
        }
        printf("%.2lf",sum);
        return 0;
    }

    后来参照网上的公式

      sum+=(double)(N-i)*(double)(i+1)*a[i];

      

    #include<iostream>
    using namespace std;
    int main()
    {
        double n;
        double arr[100000];
        double sum = 0;
        scanf("%lf",&n);
        for(int i=0; i<n; i++){
            scanf("%lf",&arr[i]);
            sum += (n-i)*(i+1)*arr[i];
        }
        printf("%.2lf",sum);
        return 0;
    }

     

  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/wysAC666/p/9912361.html
Copyright © 2011-2022 走看看