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;
}

原文地址:https://www.cnblogs.com/houzm/p/12260721.html

时间: 2024-07-30 05:23:40

PAT Basic 1132 数列的?段和(20) [数学问题-简单数学]的相关文章

PAT 乙级 1049 数列的片段和(20) C++版

1049. 数列的片段和(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{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)

PAT Basic 1003 我要通过! (20 分)

“答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 字符串中必须仅有 P. A. T这三种字符,不可以包含其它字符: 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串: 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a. b. c 均或者是空字符串,或者是仅由字母

PAT Advanced 1132 Cut Integer (20) [数学问题-简单数学]

题目 Cutting an integer means to cut a K digits long integer Z into two integers of (K/2) digits long integers A and B. For example, afer cutting Z = 167334, we have A = 167 and B = 334. It is interesting to see that Z can be devided by the product of

PAT Basic 1037 在霍格沃茨找零钱 (20 分)

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱. 输入格式: 输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔.这里 Galleon 是 [0, 1] 区间内的整数,Sickle 是 [0, 17) 区间内

PAT Basic 1104 数字?洞 (20) [数学问题-简单数学]

题目 给定任?个各位数字不完全相同的4位正整数,如果我们先把4个数字按?递增排序,再按?递减排序,然后?第1个数字减第2个数字,将得到?个新的数字.?直重复这样做,我们很快会停在有"数字?洞"之称的6174,这个神奇的数字也叫Kaprekar常数.例如,我们从6767开始,将得到 7766 – 6677 = 1089 9810 – 0189 = 9621 9621 – 1269 = 8352 8532 – 2358 = 6174 7641 – 1467 = 6174 - - 现给定任意

PAT 甲级 1058 A+B in Hogwarts (20 分) (简单题)

1058 A+B in Hogwarts (20 分)   If you are a fan of Harry Potter, you would know the world of magic has its own currency system -- as Hagrid explained it to Harry, "Seventeen silver Sickles to a Galleon and twenty-nine Knuts to a Sickle, it's easy enou

PAT Advanced 1049 Counting Ones (30) [数学问题-简单数学问题]

题目 The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal form of the integers from 1 to N. For example, given N being 12, there are five 1's in 1, 10, 11, and 12. Input Specification: Each

PAT Basic 1057 数零壹 (20 分)

给定一串长度不超过 1 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0.多少 1.例如给定字符串 PAT (Basic),其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0.4 个 1. 输入格式: 输入在一行中给出长度不超过 1.以回车结束的字符串. 输出格式: 在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔

PAT (Basic Level) Practise (中文)1004. 成绩排名 (20)

读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 ... ... ... 第n+1行:第n个学生的姓名 学号 成绩 其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的. 输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低