weinan030416

导航

求和

给定 n个整数 a1,a2,,an ,求它们两两相乘再相加的和

 

可以写为S=a1*(a2+a3+...+an)+a2*(a3+a4+...+an)+...+an-1*an;

num和sum数组分别存放元素和元素对应乘的数字 

刚开始我用双层循环来求sum,结果超时

改进:sum[i]=sum[i+1]+num[i+1]

#include <iostream>
using namespace std;
int main()
{
  int total;
  cin>>total;
  int num[total];
  long long int sum[total];
  for(int i=0;i<total;i++)
  {
    cin>>num[i];
  }
  if(total==1)
  {
    cout<<num[0];
    return 0;
  }
  else
  {
    for(int i=0;i<total;i++)
    sum[i]=0;//设置为0
    for(int i=total-2;i>=0;i--)
    {
      sum[i]=sum[i+1]+num[i+1];
    }
    long long int res=0;
    for(int i=0;i<total;i++)
    {
      res+=sum[i]*num[i];
    }
    cout<<res;
    return 0;
    }
}

 

posted on 2022-12-29 17:08  楠030416  阅读(30)  评论(0编辑  收藏  举报