zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    Notes about "Exploring Expect"
    Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
    Eclipse带参数调试的方法
    MIT Scheme Development on Ubuntu
    Manage Historical Snapshots in Sonarqube
    U盘自动弹出脚本
    hg的常用配置
    Java程序员的推荐阅读书籍
    使用shared memory 计算矩阵乘法 (其实并没有加速多少)
    CUDA 笔记
  • 原文地址:https://www.cnblogs.com/houzm/p/12260721.html
Copyright © 2011-2022 走看看