---
# System prepended metadata

title: Two sum

---

# 🚦 兩數之和
[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
