PAT 乙级 1049 数列的片段和

输入样例:

4

0.1 0.2 0.3 0.4

输出样例:

5.00

暴力解法时间复杂度Θ(n^3) 空间复杂度Θ(n) 这种复杂度肯定会超时的。

一开始我还以为是DP,优化掉了一层循环时间复杂度Θ(n^2) 空间复杂度Θ(n) 结果还是超时了。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>

using namespace std;

double sum(double* p, int n);

int main()
{
    int n;
    cin >> n;
    double* p = new double[n];
    for (int i = 0; i<n; i++)
        scanf("%lf", &p[i]);
    printf("%.2lf", sum(p, n));
    delete p;
    return 0;
}

double sum(double* p, int n)
{
    double* q = new double[n];
    bool* r = new bool[n];
    memset(q, 0, n * sizeof(double));
    memset(r, 0, n * sizeof(bool));
    double sum = 0;
    double allSum = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j + i <= n; j++)
        {
            q[j] = q[j] + p[j + i - 1];
            sum += q[j];
        }
    }
    delete q, r;
    return sum;
}

最后我才发现这是一道数学题,需要找一下规律:

给定5个数 0.1 0.2 0.3 0.4 0.5,出现下列连续子列

[0.1] [0.1 0.2] [0.1 0.2 0.3] [0.1 0.2 0.3 0.4] [0.1 0.2 0.3 0.4 0.5]

[0.2] [0.2 0.3] [0.2 0.3 0.4] [0.2 0.3 0.4 0.5]

[0.3] [0.3 0.4] [0.3 0.4 0.5]

[0.4] [0.4 0.5]

[0.5]

0.1的出现次数为 5 ,5 × 1 = 5。

0.2的出现次数为 8 ,4 × 2 = 8。

0.3的出现次数为 9 ,3 × 3 = 9。

0.4的出现次数为 8 ,2 × 4 = 8。

0.5的出现次数为 5 ,1 × 5 = 5。

可以发现规律某个数字在序列中的出现次数为 (n-i) × (i+1) ,n为原始序列长度i为当前序列所处的位置(从0开始计算)。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>

using namespace std;

double sum(double* p, int n);

int main()
{
    int n;
    cin >> n;
    double* p = new double[n];
    for (int i = 0; i<n; i++)
        scanf("%lf", &p[i]);
    printf("%.2lf", sum(p, n));
    return 0;
}

double sum(double* p, int n)
{
  double sum=0;
  for(int i=0;i<n;i++)
  {
    sum+=p[i]*(n-i)*(i+1);
  }
  return sum;
}

原文地址:https://www.cnblogs.com/FDProcess/p/9245873.html

时间: 2024-08-29 22:33:50

PAT 乙级 1049 数列的片段和的相关文章

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)

PTA乙级 (1049 数列的片段和 (20分))

1049 数列的片段和 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805275792359424 第一次提交: 代码: #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cmath> #include <algorithm>

1049. 数列的片段和(20)

1049. 数列的片段和(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

PAT-乙级-1049. 数列的片段和(20)

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)

1049 数列的片段和 (20 分)

1049 数列的片段和 (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 +

1049 数列的片段和(20)(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 +

PAT Basic 1049

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 +

1054. 求平均值 (20)-PAT乙级真题

今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org/course/zju-93001#/info :然后就是跟着<算法之美>也要同步看完. 然后就在PAT上随便做一道题,这是第一次通过AC,发现了两个比较好的博客主页:http://www.liuchuo.net/  和  https://www.joyhwong.com/   都总结了刷题的过程

PAT乙级1034. 有理数四则运算(20)

本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分:若为负数,则须加括号:若除法分母为0,则输出“Inf”.题目保证正确的输出中没