码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【PAT甲级 - C++题解】1104 Sum of Number Segments


    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
    📚专栏地址:PAT题解集合
    📝原题地址:题目详情 - 1104 Sum of Number Segments (pintia.cn)
    🔑中文翻译:数段之和
    📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
    ❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

    1104 Sum of Number Segments

    Given a sequence of positive numbers, a segment is defined to be a consecutive subsequence. For example, given the sequence { 0.1, 0.2, 0.3, 0.4 }, we have 10 segments: (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) and (0.4).

    Now given a sequence, you are supposed to find the sum of all the numbers in all the segments. For the previous example, the sum of all the 10 segments is 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N, the size of the sequence which is no more than 105. The next line contains N positive numbers in the sequence, each no more than 1.0, separated by a space.

    Output Specification:

    For each test case, print in one line the sum of all the numbers in all the segments, accurate up to 2 decimal places.

    Sample Input:

    4
    0.1 0.2 0.3 0.4
    
    • 1
    • 2

    Sample Output:

    5.00
    
    • 1
    题意

    给定一个正数序列,每个非空连续子序列都可被称作一个数段。

    例如,给定序列 { 0.1, 0.2, 0.3, 0.4 },该序列共包含 10 个不同数段,(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 个数段的总和为 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

    思路

    我们可以假设当前要算的是第 i 个数:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5xHBd96-1667557099650)(PAT 甲级辅导.assets/21.png)]

    那么在 0 ~ i 之间包含 i 的连续子字段有 i 个,而在 i ~ n 之间包含 i 的连续子字段有 n - i + 1 个。

    所以只用将两部分拼起来就可以得到在 0 ~ n 之间包含 i 的连续子字段数量,即一共 i * (n - i + 1) 个。故我们可以从前往后依次计算每个数的总值,即得到 a[i] * i * (n - i + 1) 。

    注意,答案输出保留 2 位小数,并且要用 long double 去存储数值,double 的精度不够。

    代码
    #include
    using namespace std;
    
    const int N = 100010;
    int a[N];
    
    int main()
    {
        int n;
        cin >> n;
        long double res = 0;
        for (int i = 1; i <= n; i++)
        {
            long double x;
            cin >> x;
            res += x * i * (n - i + 1);
        }
        printf("%.2Lf\n", res);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    知乎二面:请问Redis 如何实现库存扣减操作和防止被超卖?
    HTML实现拖拽文件并将参数显示在控制台
    开放域类型发现:Open Relation and Event Type Discovery with Type Abstraction
    **3DSlicer**之Python脚本储存库代码实验: 应用vtkCellLocator定位最近点的cellID
    搞安全开发都是用什么编程语言?
    js第五章
    【回归预测-BP预测】基于灰狼算法优化BP神经网络实现数据预测(多输入多输出)含Matlab代码
    【无标题】
    CentOS 7 安装详细教程
    Java-基于SSM+JSP的医院挂号管理系统
  • 原文地址:https://blog.csdn.net/Newin2020/article/details/127694145
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号