題目:
(6 級) IQ Test
Bob 準備要做 IQ 測驗,最常出現的問題是找出哪個數字不一樣。
Bob 發現不一樣的數字通常其奇偶數與其他數字不一樣。
幫助 Bob 檢查他的答案,他需要一個程式來幫他找出哪個數字的奇偶數與其他的不一樣,並且回傳那個數字的位置。
!
請留意你的任務是幫助 Bob 解決真正 IQ 測驗,因此 elements
的 indexes
應該從 1
開始而非 0
。
範例:
iq_test("2 4 7 8 10") => 3
第三個數字為奇數,而其他數字皆為偶數。
iq_test("1 2 1 1") => 2
第二個數字為偶數,而其他數字皆為奇數。
思考方式:
true/false
陣列)true/false
何者只出現一次index
並加上 1
Ruby 解法:
def iq_test(numbers)
# 變數 diff 存放 true/false 陣列
# 先把參數 numbers 轉成陣列,然後用 map method 依序比對
diff = numbers.split(" ").map { |n|
# 把每個 element 轉成 integer 再判斷是否為奇數
n.to_i.odd?
}
# 如果奇數只有一個
if diff.count(true) == 1
# 就回傳該奇數位置的 index + 1
diff.index(true) + 1
else
# 反之則回傳偶數位置的 index + 1
diff.index(false) + 1
end
end
JavaScript 解法:
function iqTest(numbers){
// 變數 diff 存放 true/false 陣列
// 先把參數 numbers 轉成陣列,然後用 map function 依序比對
let diff = numbers.split(" ").map(n => {
// 把每個 element 轉成 integer 再判斷是否為奇數
return parseInt(n) % 2 === 0;
});
// countTrue 變數存放計算結果
let countTrue = 0;
// 把 true/false 陣列的每個 element 拿出來比對
diff.map(bool => {
// 如果是 ture (奇數)
if (bool) {
// countTrue 就加 1
countTrue++;
}
});
// 如果奇數只有一個
if (countTrue === 1) {
// 就回傳該奇數位置的 index + 1
return diff.indexOf(true) + 1
} else {
// 反之則回傳偶數位置的 index + 1
return diff.indexOf(false) + 1
}
}