• PAT Basic 1132 数列的⽚段和(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

    题目分析

    给定⼀个正数数列,从中截取任意连续的⼏个数,称为⽚段。例如,给定数列{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,在⼀⾏中输出该序列所有⽚段包含的数之和,精确到⼩数点后2位

    解题思路

    1. 找到每个数字在所有序列中出现次数的规律:如果当前是第i个数,则总出现次数等于i*(n+1-i)
    2. 计算总和时,只需遍历i,总和+=当前数字i(n+1-i)

    易错点

    1. doubleintint和intintdouble,
      t+=i*(n+1-i)*m;//int*int*double 本题中n取值最大为10^5,所以int*int之后还是int可能越界,测试点2,3错误
      t+=m*(n+1-i)*i;//double*int*int 本题中n取值最大为10^5,但是double*int之后,结果隐式转换为double继续乘int,不会越界

    Code

    Code 01

    #include <iostream>
    using namespace std;
    int main() {
    	int n;
    	cin >> n;
    	double sum = 0.0, temp;
    	for (int i = 1; i <= n; i++) {
    		cin >> temp;
    		sum = sum + temp * i * (n - i + 1);
    	}
    	printf("%.2f", sum);
    	return 0;
    }
    

    Code 01

    #include <iostream>
    using namespace std;
    int main(int argc,char * argv[]) {
    	long long n;
    	scanf("%d",&n);
    	double m, t=0.0;
    	for(long long i=1; i<=n; i++) {
    		scanf("%lf",&m);
    		t+=i*(n+1-i)*m; //如果i定义为int这样写,测试点2,3不通过,因为n最大取值为10^5,int*int越界 
    		//t+=m*i*(n+1-i);
    	}
    	printf("%.2f",t);
    	return 0;
    }
    
  • 相关阅读:
    Confluence 6 快捷键
    Confluence 6 快捷键
    【转】Linux常用命令
    【转】Linux常用命令
    【转】Linux常用命令
    互联网分布式微服务云平台规划分析--服务监控中心
    .NET Framework基础知识(五)(转载)
    Windows 下安装mysql
    kvm
    s5-6 Linux 标准输出 系统优化 目录结构
  • 原文地址:https://www.cnblogs.com/houzm/p/12260721.html
Copyright © 2020-2023  润新知