题解
数组元素求和
1 条题解
-
0
解题思路
题目要把数组“首尾配对”相加:第 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