1、求和
问题描述
给定 nn 个整数 a_1, a_2, · · · , a_na1,a2,⋅⋅⋅,an ,求它们两两相乘再相加的和,即:
S=a_{1} \cdot a_{2}+a_{1} \cdot a_{3}+\cdots+a_{1} \cdot a_{n}+a_{2} \cdot a_{3}+\cdots+a_{n-2} \cdot a_{n-1}+a_{n-2} \cdot a_{n}+a_{n-1} \cdot a_{n}S=a1⋅a2+a1⋅a3+⋯+a1⋅an+a2⋅a3+⋯+an−2⋅an−1+an−2⋅an+an−1⋅an
输入格式
输入的第一行包含一个整数 nn。
第二行包含 nn 个整数 a_1,a_2,\cdots, a_na1,a2,⋯,an。
输出格式
输出一个整数 SS,表示所求的和。请使用合适的数据类型进行运算。
样例输入
4
1 3 6 9
样例输出
117
评测用例规模与约定
对于 30 \%30% 的数据,1 \leq n \leq 1000,1 \leq a_{i} \leq 1001≤n≤1000,1≤ai≤100 。
对于所有评测用例, 1 \leq n \leq 200000,1 \leq a_{i} \leq 10001≤n≤200000,1≤ai≤1000 。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
解法:暴力法 但是通过率只有60%
通过两个for循环 遍历输入的值并 两两相乘后 相加
#include <stdio.h>
#include <stdlib.h>
int fun(int a1,int a2){
return a1*a2;
}
int main()
{
int n,a[200000]={0};
long num=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++){
num+=fun(a[i],a[j]);
}
printf("%ld",num);
return 0;
}
解法2:
思路:利用 a1*a2+a1*a2+...+a1*an 合并同类项 减少大量的计算 达成100%通过
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long int n,a[200000],i,j,sum=0,tmp=0;
scanf("%ld",&n);
for(i=0;i<n;i++)
{
scanf("%ld",&a[i]);
tmp=tmp+a[i];
}
for(i=0;i<n;i++)
{
tmp=tmp-a[i];
sum=sum+a[i]*tmp;
}
printf("%ld",sum);
return 0;
}
2、灭鼠先锋
文章来源地址https://www.toymoban.com/news/detail-408754.html文章来源:https://www.toymoban.com/news/detail-408754.html
到了这里,关于蓝桥杯练习第一天--求和、灭鼠先锋的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!