题目描述
给定 n 个整数 a1, a2, ..., an , 求它们两两相乘再相加的和,即
输入格式
输入的第一行包含一个整数 n 。
第二行包含 n 个整数 a1, a2, ..., an 。
输出格式
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
样例 1
样例输入 1
4
1 3 6 9
样例输出 1
117
提示
对于 30% 的数据, 1 ≤ n ≤ 1000,1 ≤ ai ≤ 100 。
对于所有评测用例, 1 ≤ n ≤ 2*10^5,1 ≤ ai ≤ 1000 。
蓝桥杯 2022 省赛 A 组 C 题。
代码
观察题目可以看出,所求的S可化为下列式子:
每项ai所乘的因子为 第 i+1 至 第 n 项的和,可采用类似迭代的方式求。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
long int n;
cin>>n;
vector<int> v;
int a;
while(cin>>a)
{
v.push_back(a);
if(cin.get() == '\n') break;
}
long int sum = 0;
long int add[n];
for(long int i = 0; i < n-1; i++)
{
add[i] = 0;
}
long int i = n-1;
while(i > 0)
{
if(i == n-1) add[i] = v[i];
else add[i] = add[i+1] + v[i];
i--;
}
for(int j = 0; j < n-1; j++)
{
sum += v[j] * add[j+1];
}
cout<<sum;
return 0;
}