指標陣列加總

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。

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。