1049. 数列的片段和
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{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.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.0 |
可以发现:
1.0 出现了 4 * 1 次,即 n 次。4 代表一列有 4 个 1.0,1 代表共有一列。
2.0 出现了 3 * 2 次,即 (n-1) * 2 次。3 代表一列有 3 个 2.0,2 代表共有二列。
3.0 出现了 2 * 3 次,即 (n-2) * 3 次。2 代表一列有 2 个 3.0,3 代表共有三列。
4.0 出现了 1 * 4 次,即 (n-3) * 4 次。1 代表一列有 1 个 4.0,4 代表共有四列。
于是总和就等于 \(\sum_{i=0}^{N-1}a[i] * (N - i) * (i + 1)\)。
值得注意的是:
sum += a[i] * (N - i) * (i + 1);
与
sum += (N - i) * (i + 1) * a[i];
这两种写法有所差距。第一种写法,三次运算每次都是 double 型,第二种写法,第一次运算结果是 int 型,有可能出现溢出。当 i = N/2 时,(N - i) * (i + 1)
的值最大,超过了 int 型所能表示的范围。你可以对第二种写法进行强制类型转换(转换成 long long int 或者 double 都可,推荐 long long int,这样至少在精度上少了一次损失),或者写成第一种那样,利用 C 语言的自动类型转换。
解题代码:
#include<stdio.h> int main()
{ int N;scanf("%d", &N);double a[N];double sum = 0;for (int i=0; i<N; i++) {scanf("%lf", &a[i]);sum += (long long int)(N - i) * (i + 1) * a[i];} printf("%.2f\n", sum);return 0;
}
转载于:https://www.cnblogs.com/andywenzhi/p/5837751.html
1049. 数列的片段和相关推荐
- Pat乙级 1049 数列的片段和
Pat乙级 1049 数列的片段和 思路 代码 题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/994805275792 ...
- 1049. 数列的片段和(20)
1049. 数列的片段和(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正数数列,我们可以从中截 ...
- C++学习之路 | PTA乙级—— 1049 数列的片段和 (20 分)(精简)
1049 数列的片段和 (20 分) 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0. ...
- 测试点解析:1049 数列的片段和_12行代码AC
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, ...
- 【PAT乙级】1049 数列的片段和 (20 分)
题目地址 #include<cstdio> #include<iostream> #include<cmath> using namespace std; int ...
- PAT 乙级 ------ 1046~1050 划拳、编程团体赛、数字加密、数列的片段和、螺旋矩阵附思路和代码
这个鬼天气欸,又降温到十几度了.看帖子的你,今天也要开心啊!!!PEACE & LOVE 1046 划拳 思路: 每次读取四个数,根据规则求和比较,只有一方胜利一方失败从才会喝酒,同赢同输 ...
- PAT1049 数列的片段和 (20 分)
心得 在处理较大数据的时候,要注意处处防止溢出.就算结果是long long int型,过程中也不能出现int. 这道题不难,易错点就在溢出上.一开始变量都定义成double,后两个测试点不通过.改成 ...
- 【PAT乙级题库】全套总结
我将难度分为三个等级: 简单 中等 难 简单的做一次足以,做再多遍也无任何的意义. 中等的可以多刷几遍 难的多刷几遍 目录 1001 害死人不偿命的(3n+1)猜想[简单] 1002 写出这个数 (2 ...
- PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
1001 害死人不偿命的(3n+1)猜想 (15 分) #include <bits/stdc++.h> using namespace std; int main(){ios::sync ...
最新文章
- toad for oracle xpert edition,Toad for oracle 软件产品模块对比,方便大家选型
- css多行超出显示点_CSS实现单行、多行文本溢出显示省略号(…)
- 标准日本语初级上第一单元 第一课[李さんは 中国人です]
- redis mysql主从延迟_MySQL主从延迟问题解决
- 神器!微软发布 Python 的 JIT 编译器:Pyjion!
- html css a标签的应用
- Scrapy网络爬虫实战[保存为Json文件及存储到mysql数据库]
- golang byte转string_golang版memcached之groupcache缓存入门
- Azkaban 进程和任务监控(任务状态从MySQL同步到SqlServer)
- mysql5.5源码安装_MySQL5.5源码安装
- 【Python】 html解析BeautifulSoup
- 线程生命周期与创建线程的多种方式
- EXCEL如何将平均值加减标准差设置为科学计数法显示
- 主页被锁定为 hao.360.cn
- 计算机技术复试新浪微博,四川大学计算机学院复试经验交流
- Linux perf 1.1、perf_event内核框架
- html css小圆圈,jquery+css3实现会动的小圆圈效果
- CQYZ Online Judge P2995 萨鲁曼的大军(c++)
- 阿里云APP备案操作流程 新手看过来
- VnlnHub Momentum
热门文章
- Mysql高性能优化规范建议,太厉害了!
- 黄了。Google中国版搜索
- Java集合:HashMap
- IntelliJ IDEA配置maven,并创建一个实例作为演示
- 【Python】青少年蓝桥杯_每日一题_4.15_正方形里面套个实心圆形
- python elseif用法_python学习笔记(一)
- 一个图片 在另一个图片定位_淋雨图片孤身一人 一个人在淋雨的图片_新闻资讯...
- java arraylist 对象 删除_ArrayList实现删除重复元素(元素不是对象类型的情况)...
- Python编程语言学习:包导入和模块搜索路径简介、使用方法之详细攻略
- TF之AE:AE实现TF自带数据集数字真实值对比AE先encoder后decoder预测数字的精确对比—daidingdaiding