指標陣列加總
0.5s 256M小黃瓜正在幫「最佳化睡眠」課程統計成績。評分程式會準備很多個 int 變數,並把指向它們的指標放進一個指標陣列中。這個指標陣列的最後一格會是 NULL,表示資料到此結束。
你需要實作以下函式:
void sum(int *arr[]);
arr是一個指標陣列,每個非空指標都會指向一個有效的int。arr的最後一個元素會是NULL指標。- 請把每個指標指向的
int加總起來,並輸出總和。 - 總和保證在
int範圍內。 - 請不要自行撰寫
main(),也不要讀取輸入。
輸入格式
範例評分程式採用以下格式輸入:
T
n_1 x_{1,1} x_{1,2} ... x_{1,n_1}
n_2 x_{2,1} x_{2,2} ... x_{2,n_2}
\vdots
n_T x_{T,1} x_{T,2} ... x_{T,n_T}
其中 \(T\) 代表評分程式會呼叫 sum 的次數。每次呼叫時,評分程式會建立 \(n_i\) 個整數,把它們的指標依序放入 arr,最後再放入 NULL。
請注意,正式評分時不會要求你自行讀取輸入;它會直接呼叫你實作的函式。
限制
- \(1 \le T \le 50\)
- \(1 \le n_i \le 10000\)
- \(-1000000 \le x_{i,j} \le 1000000\)
- 每次呼叫時,所有非空指標都會指向有效的
int - 每次呼叫的總和都保證在
int範圍內
輸出格式
每次 sum 被呼叫時,請輸出一個整數,代表所有指標指向的數字總和。
你可以自行輸出換行,也可以只輸出數字;評分程式會忽略答案之間的空白差異。
範例輸入 1
1
5 2 1 4 5 3
範例輸出 1
15
範例解釋 1
指標陣列中的五個指標依序指向 2、1、4、5、3,總和是 15。
範例輸入 2
2
4 -3 0 7 -2
1 42
範例輸出 2
2
42
本機測試模板
如果你想先在自己的電腦上測試,只要把你實作的 sum 函式貼到下面程式碼中的註解位置,就可以直接編譯執行:
#include <iostream>
#include <vector>
using namespace std;
// 把你實作的 sum 貼在這裡。
// void sum(int *arr[]) {
// }
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> values(n);
vector<int*> ptrs;
for (int i = 0; i < n; ++i) {
cin >> values[i];
ptrs.push_back(&values[i]);
}
ptrs.push_back(NULL);
sum(ptrs.data());
cout << '\n';
}
}
題目來源
本題改編自 NTUCPC OJ Problem 624。