📌  相关文章
📜  国际空间研究组织 | ISRO CS 2018 |问题 37(1)

📅  最后修改于: 2023-12-03 14:50:48.289000             🧑  作者: Mango

国际空间研究组织ISRO CS 2018问题37

本题要求编写程序来计算给定数组中元素间的加权和。其中,每个元素的权重是它与其相邻元素的乘积。如果元素为数组的边缘元素,则仅考虑它与其相邻的一个元素。

输入格式

输入的第一行包含一个整数T,表示测试用例的数量。每个测试用例包含两行。每个测试用例的第一行包含一个整数N,表示数组中元素的数量。每个测试用例的第二行包含N个以空格分隔的整数,表示数组的元素。

输出格式

对于每个测试用例,打印一个新行,其中包含数组中元素的加权和,精确到小数点后4位。 在进行计算时,用double类型存储数据。

代码实现
#include<bits/stdc++.h>
using namespace std;
int T,n,a[1000007];
double w[1000007],sum;
int main(){
    cin>>T;
    while(T--){
        cin>>n, sum=0;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int i=1;i<=n;i++){
            if(i==1) w[i]=a[i]*a[i+1]*1.0;
            else if(i==n) w[i]=a[i]*a[i-1]*1.0;
            else w[i]=1.0*a[i]*a[i-1]*a[i+1];
            sum+=w[i];
        }
        printf("%.4f\n",sum);
    }
    return 0;
}
代码说明

这是一道简单的数学题目,本题要求我们计算加权和,而加权系数又可以根据数组元素和下标计算出来,因此只需要简单的遍历一遍数组即可完成本题。

首先,输入T表示测试用例数量,接着输入n和n个数组元素;然后我们定义一个数组w用于存储加权系数。循环遍历数组元素,如果当前为边界元素,则按照题意计算权重;否则,根据元素和周围两个元素相乘的结果计算权重,并且将权重加入sum中。

最后求得sum后,我们只需要将结果输出即可。需要注意的是,题目中要求我们输出加权和,因此格式化输出时需要保留小数点后4位。