語法書 / AA 競程語法書 上冊 / 第六單元 / 完整範例:解決搬家的箱子

6.2 完整範例:解決搬家的箱子

現在我們知道陣列的語法了,讓我們實際解掉開頭的「搬家的箱子」——剛才要一百個變數加兩百層 if 的題目,用陣列只要十幾行:

範例程式碼

#include <iostream>
using namespace std;

const int MAX_N = 105;             // 題目 N ≤ 100,上限再多開一點
int a[MAX_N];                      // 全域陣列(好處見 6.5、6.10)

int main() {
    int N;
    cin >> N;                      // 讀入物品數量
    for (int i = 1; i <= N; i++) {
        cin >> a[i];               // 第 i 個放進箱子的編號存進 a[i]
    }

    for (int i = N; i >= 1; i--) { // 倒著跑、倒著印
        cout << a[i] << " ";
    }
    cout << '\n';

    return 0;
}

執行結果(題目的範例輸入):

輸入:
8
5 8 1 3 9 2 7 4

輸出:
4 7 2 9 3 1 8 5

讀入的迴圈正著跑、輸出的迴圈倒著跑——存進陣列之後,「讀入的順序」和「使用的順序」就分家了,想按什麼順序取用都行。這就是陣列的威力:N3 還是 100,程式碼都是同一份。

陣列是處理「一串資料」時最基本的工具。許多基礎題會需要先保存資料,再根據題目邏輯訪問、修改或統計陣列中的元素。

動手試試看:把讀入迴圈改成 for (int i = 0; i < N; i++),改用 a[0] ~ a[N-1] 儲存。倒著印的那個迴圈要跟著怎麼改,結果才會一樣?改完執行驗證,再進下一節。