求和(蓝桥杯标签: 2022, 省赛)

该文描述了一个编程问题,要求计算给定整数数组中所有数对相乘然后相加的总和。解决方案是通过迭代数组并利用每项与后续项之和的乘积来求解,最后输出总和。样例输入和输出展示了问题的实例,同时给出了针对不同规模数据的评测用例限制和运行时间、内存限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

给定 �n 个整数 �1,�2,⋅⋅⋅,��a1​,a2​,⋅⋅⋅,an​ ,求它们两两相乘再相加的和,即:

S=a1​⋅a2​+a1​⋅a3​+⋯+a1​⋅an​+a2​⋅a3​+⋯+an−2​⋅an−1​+an−2​⋅an​+an−1​⋅an​

思路:求和的实质就是求每项与它后几项的和的乘积sum=a1*(a2+a3+...+an)+a2*(a3+a4+..+an)....+an-1*an

输入格式

输入的第一行包含一个整数 an。

第二行包含 n 个整数 a1​,a2​,⋯,an​。

输出格式

输出一个整数 �S,表示所求的和。请使用合适的数据类型进行运算。

样例输入

4
1 3 6 9

样例输出

117

评测用例规模与约定

对于 30%30% 的数据,1≤�≤1000,1≤��≤1001≤n≤1000,1≤ai​≤100 。

对于所有评测用例, 1≤�≤200000,1≤��≤10001≤n≤200000,1≤ai​≤1000 。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M
  • #include <iostream>
    using namespace std;
    int main()
    {
      unsigned long long sum=0,x=0;
      int n;
      cin>>n;
      int a[n];
      for(int i=0;i<n;i++){
        cin>>a[i];
        x+=a[i];
      }
      for(int i=0;i<n-1;i++){
        x=x-a[i];
        sum+=a[i]*x;
      }
      printf("%llu",sum);
      return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值