1學習目標
- 會比較清單裡相鄰的兩筆資料:第 i 項和第 i+1 項。
- 知道比較相鄰資料時,迴圈只能跑到 N−1。
- 會把相鄰比較和計數、找最大值組合起來。
2概念說明
有些問題要看的不是單一筆資料,而是前後兩筆的關係:今天比昨天多還是少?有沒有連續兩個一樣的?這時要把清單裡相鄰的兩項拿來比。
3
5
5
2
2
8
i = 2 時,比較第 2 項和第 3 項
i 從 1 數到 N−1:
比較 第 i 項 和 第 i+1 項
⚠️ 迴圈為什麼只能到 N−1?
有 6 筆資料時,最後一組是第 5 項和第 6 項。如果 i 跑到 6,就要拿第 7 項來比,但清單裡沒有第 7 項,結果會出錯。所以 i 的終點是 N−1。
3示範題:跟著一步一步做(1 題)
先讀題,再一步一步點開來看。建議每看完一步,就先自己在平台上試著寫寫看。
相鄰相同的位置
L2|進階IDX01-006給定 N 個整數,請找出第一組相鄰且數值相同的位置。若第 i 個與第 i+1 個相同,輸出 i。若沒有相鄰相同,輸出 0。
- 輸入
- 第一個整數為 N,接著輸入 N 個整數。保證 N 大於或等於 2。
- 輸出
- 輸出一個整數,代表第一組相鄰相同的左側位置;若不存在則輸出 0。
範例1
輸入
輸入
6 3 5 5 2 2 8
輸出
2
第 1 步:讀題,找出輸入和輸出
- 輸入:N(至少 2),接著 N 個整數。
- 輸出:第一組「相鄰且相同」的左邊位置 i;沒有就輸出 0。
第 2 步:把問題拆成步驟
這題是「相鄰比較」加上 K10 學過的「第一次出現」:
(讀入 N 個數字,存進 全部數字)
位置 設為 0
i 從 1 數到 N−1:
如果 位置 = 0 且 第 i 項 = 第 i+1 項:
位置 設為 i
說出 位置第 3 步:用範例走一次
清單[3, 5, 5, 2, 2, 8]:
| i | 第 i 項 | 第 i+1 項 | 相同? | 位置 |
|---|---|---|---|---|
| 1 | 3 | 5 | 否 | 0 |
| 2 | 5 | 5 | 是 | 2 |
| 3 | 5 | 2 | 否 | 2 |
| 4 | 2 | 2 | 是,但已經找到過 | 2 |
| 5 | 2 | 8 | 否 | 2 |
輸出 2。
第 4 步:對照範例答案
按「載入範例」,看看迴圈的終點是「N − 1」,以及取第 i+1 項時,位置是用數學積木算出來的「i + 1」。
⚠️ 常見錯誤
- 終點寫成 N:最後一輪會拿不存在的第 N+1 項來比。
- 忘了「位置 = 0」:會得到最後一組相同的位置 4,而不是第一組的 2。
4延伸挑戰(2 題)
核心題都會了嗎?這些題目需要把好幾個技巧組合起來,想挑戰的話可以試試看。
🚀 相鄰變化統計 L3|挑戰
挑戰重點:把每一組相鄰資料分成三種情況:後一天比較大(增加)、比較小(減少)、一樣(相同),各用一個計數變數。這是 K04 的多重分支加上 K08 的計數。
給定 N 天的數值紀錄,請統計有幾次比前一天增加、幾次比前一天減少,以及幾次和前一天相同。
- 輸入
- 第一個整數為 N,接著輸入 N 個整數。保證 N 大於或等於 2。
- 輸出
- 輸出三個整數,依序為增加次數、減少次數、相同次數,中間以空白分隔。
範例1
輸入
輸入
6 10 12 12 9 15 14
輸出
2 2 1
💡 需要提示嗎?
從第 2 項開始,每一項都和前一項比較,分別統計增加、減少、相同的次數。
🚀 相鄰差值最大 L3|挑戰
挑戰重點:每一組相鄰資料都算出差值(用大的減小的),再用 K09 的擂台法找出最大的差值。差值可以用「如果…否則…」決定誰減誰,也可以用數學的「絕對值」積木。
給定 N 個整數,請計算相鄰兩個數字之間差值的最大值。差值一律用較大的數減較小的數。
- 輸入
- 第一個整數為 N,接著輸入 N 個整數。保證 N 大於或等於 2。
- 輸出
- 輸出一個整數,代表相鄰差值最大值。
範例1
輸入
輸入
5 3 8 6 15 10
輸出
9
💡 需要提示嗎?
每一組相鄰數字都算出差值(用大的減小的),再從這些差值中找出最大的。
5自我檢核
學完之後,檢查看看你能不能做到這些事。有做不到的,就回到上面對應的地方再看一次。
- 我會用第 i 項和第 i+1 項比較相鄰資料。
- 我能說明迴圈的終點為什麼是 N−1。
- 我會把相鄰比較和計數、找最大值、找第一次出現組合在一起。