# 🚦 兩數之和 [TWO SUM](http://120.101.182.21/d/hd112/p/63) ## 1. 題目介紹 在這個題目中,我們的任務是從一個數列中找出兩個數字,讓它們相加等於老師給定的目標數字。 題目情境非常有趣: - 小晴和小宇在玩配對遊戲,目標是找到那組「神奇配對」使得兩數之和符合要求。 - 輸入數據包括數字個數 `n`、一組由空格分隔的正整數,以及目標和 `target`。 - 你必須找出滿足條件的兩個數字在數列中的索引(從 0 開始計算),並將它們輸出。 **注意事項:** - 每組測資只會有唯一解,因此當你發現滿足條件的配對後,就可以停止檢查。 - 同一數字(同一位置)不可以重複使用,例如:即使兩個數字的值相同,其索引也必須不同。 --- ## 2. 解題所需觀念 在解這題的過程中,你需要瞭解以下概念: ### 2.1 輸入與輸出 - **讀取數據個數 `n`**:了解如何讀取一個整數,代表接下來數據的數量。 - **讀取數字序列**:你可以用簡單迴圈讀入 `n` 個數字,儲存在變數或基本陣列中。(※ 本題盡量避免複雜的陣列或 STL,著重邏輯概念) - **讀取目標數字 `target`**:接著再讀入一個整數作為目標。 ### 2.2 使用迴圈 因為你需要檢查數列中的每一對數字,所以理解「**雙層迴圈**」非常重要: - **外層迴圈**:用來選擇第一個數字。 - **內層迴圈**:用來檢查第二個數字,其範圍一般從外層選定數字的下一個位置開始,這樣避免重覆使用同一個數字。 ### 2.3 條件判斷 在每次檢查中,需要判斷: ```cpp if (第一個數字 + 第二個數字 == target) { // 找到正確配對 } ``` 這個條件判斷非常直觀,只有當兩個數字的和等於 `target` 時,才是你要的結果。 ### 2.4 終止流程 由於題目保證只有一組答案,當你找到正確配對後,就可以立即終止程式或跳出迴圈,避免不必要的運算。 --- ## 3. 解題流程與提示 以下是解題的邏輯步驟,大家可以依照這些提示來理解如何實作,但注意:**本講義不直接給出完整的答案程式碼**! 1. **讀取輸入** - 首先,讀取整數 `n`,代表數字的個數。 - 接著,讀取 `n` 個整數形成數列。 - 最後,讀取目標數字 `target`。 2. **雙層迴圈處理** - 使用第一個迴圈遍歷數列中每一個數字(從索引 0 至 n-2)。 - 在第二層迴圈中,從當前選定位置的下一個數字開始遍歷(索引從 i+1 至 n-1)。 - 對每一對(i, j)檢查:若 `數列[i] + 數列[j]` 等於 `target`,則表示找到了正確的配對。 3. **輸出結果** - 將符合條件的兩個數字的**索引**輸出。索引從 0 開始,順序可以任意。 4. **終止程序** - 由於題目只存在唯一解,當配對找到後,程式可立即結束後續的迴圈運算。 --- ## 4. 小提示 - **注意變數命名** 使用有意義的變數名稱可以讓你的程式碼更易懂,例如:`n` 代表數字個數、`target` 代表目標和、`i` 與 `j` 用於迴圈索引、`nums` 代表讀入的數列。 - **使用迴圈結束語句** 當找到了配對,可以使用 `break` 或 `return` 來終止迴圈,避免不必要的計算。 - **測試與除錯** 在完成程式後,可利用提供的範例數據來測試你的解答是否正確。記得檢查輸入格式是否符合題目要求! --- 9 7 1 2 3 4 5 6 7 1 2 3 4 5 6 8 1 2 3 4 5 6 9 1 2 3 4 5 7 8 1 2 3 4 5 7 9 1 2 3 4 5 8 9 1 2 3 4 6 7 8 1 2 3 4 6 7 9 1 2 3 4 6 8 9 1 2 3 4 7 8 9 1 2 3 5 6 7 8 1 2 3 5 6 7 9 1 2 3 5 6 8 9 1 2 3 5 7 8 9 1 2 3 6 7 8 9 1 2 4 5 6 7 9 1 2 4 5 6 8 9 1 2 4 5 7 8 9 1 2 4 6 7 8 9 1 2 5 6 7 8 9 1 3 4 5 6 7 8 1 3 4 5 6 7 9 1 3 4 5 6 8 9 1 3 4 5 7 8 9 1 3 4 6 7 8 9 1 3 5 6 7 8 9 1 4 5 6 7 8 9 2 3 4 5 6 7 8 2 3 4 5 6 7 9 2 3 4 5 6 8 9 2 3 4 5 7 8 9 2 3 4 6 7 8 9 2 3 5 6 7 8 9 2 4 5 6 7 8 9 3 4 5 6 7 8 9