zoukankan      html  css  js  c++  java
  • 【算法笔记】B1049 数列的片段和

    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

    思路:

    举几个例子找一下规律。以四元素的数列为例,各个位置上的数组成的片段分别是:

    1      
    1 2    
    1 2 3  
    1 2 3 4
      2    
      2 3  
      2 3 4
        3  
        3 4
          4

     

     

     

     

     

     

     

    四个数分别出现次数是4(4*1)、6(3*2)、6(2*3)、4(1*4)。

    同理5个数时每个数出现次数是5(5*1)、8(4*2)、9(3*3)、8(2*4)、5(1*5)。

    由数学归纳法可以推出每个数出现次数是(n-i+1)*  i。

    codes: 

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4     int n;
     5     double num,sum = 0;
     6     cin>>n;
     7     for(int i = 0; i < n; i++){
     8         cin>>num;
     9         sum += num * (n - i) * (i + 1);
    10     }
    11     printf("%.2f
    ", sum);
    12     return 0;
    13 }
  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10619807.html
Copyright © 2011-2022 走看看