pat甲级1104. Sum of Number Segments (20)、乙级1049. 数列的片段和(20)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/richenyunqi/article/details/79752532

欢迎访问我的pat甲级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981078

欢迎访问我的pat乙级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981369

题目描述

甲级题目描述

 

乙级题目描述

算法设计

这是一道寻找数学规律的题目,直接给出结论:对于含有N个数的序列A(下标从0开始)所有片段中包含的第 i (0<=i<N-1)个数出现的次数为(i+1)*(N-i)。故所有片段中包含的数之和Sum=∑(0,N-1)  (i+1)*a[i]*(N-i)

C++代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    scanf("%d",&n);
    double a[n],sum=0.0;
    for(int i=0;i<n;++i)
        scanf("%lf",&a[i]);
    for(int i=0;i<n;++i){
//        下面这一写法是错的,因为n最大为10的5次方,(i+1)*(n-i)可能会超出int的存储范围,造成溢出
//        sum+=(i+1)*(n-i)*a[i];
        sum+=(i+1)*a[i]*(n-i);//这一写法是正确的,(i+1)*a[i]会转化成double型,不会造成溢出
    }
    printf("%.2f",sum);
    return 0;
}

 

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试