清單最大最小值的位置
L2|進階seclect-003看題目內容
- 輸入
- 第 1 行:輸入一個數N,N固定為整數5 第 2 行:輸入5 個整數,代表清單內容(以空格隔開)。
- 輸出
- 輸出一個整數,代表最小值所在的位置(索引值)。
輸入
5 8 3 5 1 6
4
輸入
5 2 4 2 9 5
1
記住資料的位置,找出目標第一次或最後一次出現在哪裡
到目前為止,我們關心的是資料的「值」:最大的是多少、總和是多少。這個知識點開始關心資料的「位置」:它排在第幾個?
找位置的方法叫做線性搜尋:從第 1 個開始,一個一個檢查,符合就把目前的位置 i 記下來。
位置 設為 0 ← 0 代表「還沒找到」
i 從 1 數到 N:
如果 第 i 項 符合條件:
位置 設為 i
說出 位置
位置的初始值設為 0 很方便:清單的位置從 1 開始,所以走完之後如果位置還是 0,就代表一次都沒找到,剛好就是很多題目要求的輸出。
上面的寫法每次符合都會覆蓋位置,所以留下來的是最後一次出現的位置。如果要第一次出現的位置,只要多加一個條件:「位置還是 0(還沒找到過)」才更新,找到之後就不會再被覆蓋。
先讀題,再一步一步點開來看。建議每看完一步,就先自己在平台上試著寫寫看。
6 4 8 3 8 5 8 8
6
目標值在最後才輸入,所以要先把資料存進清單:
(讀入 N 個數字,存進 全部數字)
詢問並等待 → 目標值
位置 設為 0
i 從 1 數到 N:
如果 全部數字 的第 i 項 = 目標值:
位置 設為 i
說出 位置清單[4, 8, 3, 8, 5, 8],目標值 8:
| i | 第 i 項 | 等於 8? | 位置 |
|---|---|---|---|
| 開始前 | - | - | 0 |
| 1 | 4 | 否 | 0 |
| 2 | 8 | 是 | 2 |
| 3 | 3 | 否 | 2 |
| 4 | 8 | 是 | 4 |
| 5 | 5 | 否 | 4 |
| 6 | 8 | 是 | 6 |
輸出 6。如果目標值是 7,位置從頭到尾都是 0,輸出 0。
按「載入範例」,看看「位置 設為 i」放在「如果」裡面,每次找到都會把位置更新成目前的 i。
6 4 8 3 8 5 8 8
2
同樣的資料,這次要找第一次出現的位置。只要在條件上多加「位置 = 0」,用「且」接起來:
如果 位置 = 0 且 全部數字 的第 i 項 = 目標值:
位置 設為 i清單[4, 8, 3, 8, 5, 8],目標值 8:i = 2 時第一次找到,位置變成 2。之後 i = 4、6 雖然也是 8,但位置已經不是 0,條件不成立,位置就停在 2。
按「載入範例」,看看「且」積木左右兩邊各放了一個條件。
照順序完成這些題目。寫完之後,可以在平台上按「載入範例」和自己的寫法比較。
5 8 3 5 1 6
4
5 2 4 2 9 5
1
5 40 55 60 80 30
3
核心題都會了嗎?這些題目需要把好幾個技巧組合起來,想挑戰的話可以試試看。
6 4 8 3 9 5 8 8 9
2
學完之後,檢查看看你能不能做到這些事。有做不到的,就回到上面對應的地方再看一次。