top1编程
← 返回题目
题解

数组元素求和

1 条题解

  • 0
    @ 2026-8-5 1:04:44

    解题思路

    题目要把数组“首尾配对”相加:第 1 个和倒数第 1 个相加,第 2 个和倒数第 2 个相加,第 3 个和倒数第 3 个相加……

    用下标表示就是:下标 i 从 0 开始,第 i 个数 a[i] 和倒数第 i+1 个数 a[n-1-i] 相加,一共配对 n/2 对,输出 n/2 个和。

    如果 n 是奇数,配对完之后正中间还剩一个数,它没有配对对象,按题意要“和自己相加”(例 2 里就是 3 和 3 相加得 6),所以输出 2 倍的中间数 a[n/2]。

    参考代码

    // 数组元素求和:第1个和倒数第1个相加,第2个和倒数第2个相加……中间数自己加自己
    #include <iostream>
    using namespace std;
    int a[1005];
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) cin >> a[i];
        for (int i = 0; i < n / 2; i++) {                 // 前一半与后一半对应相加
            if (i) cout << ' ';
            cout << a[i] + a[n - 1 - i];
        }
        if (n % 2 == 1) {                                 // n是奇数时中间那个数要和自己相加
            if (n / 2 > 0) cout << ' ';
            cout << a[n / 2] + a[n / 2];
        }
        cout << endl;
        return 0;
    }
    

    复杂度分析

    数组只扫描一遍,时间复杂度 O(n)。数组存 n 个数,空间复杂度 O(n)。

    • 1