MTR04 W2 D18 陣列練習題


Posted by Christy on 2020-07-26

練習八
回傳陣列裡面所有小於 n 的數的總和
請寫一個函式 findSmallerTotal,接收一個陣列以及數字 n,回傳陣列裡面所有小於 n 的數的總和。

findSmallerTotal([1, 2, 3], 3) 正確回傳值:3

findSmallerTotal([1, 2, 3], 1) 正確回傳值:0

findSmallerTotal([3, 2, 5, 8, 7], 999) 正確回傳值:25

findSmallerTotal([3, 2, 5, 8, 7], 0) 正確回傳值:0

function findSmallerTotal(arr, n){
 var sum = 0
 for(var i = 0; i < arr.length; i++){
  if (arr[i] < n) sum += arr[i]
 }
 return sum   
}

console.log(findSmallerTotal([3, 2, 5, 8, 7], 999))

這題決定抄 Huli 的解法,因為我覺得這樣下去不是辦法,用我寫的第七題的寫法會一直卡住


練習十:回傳陣列總和
請寫一個 function sum,接收一個陣列並回傳陣列中數字的總和。

sum([1, 2, 3]) 預期回傳值:6

sum([-1, 1, 2, -2, 3, -3]) 預期回傳值:0

方法一:

function sum(arr){
    var answer = 0
    for (var i = 0; i < arr.length; i++){
    answer += arr[i]
 }
 return answer
}
console.log(sum([-1, 1, 2, -2, 3, -3]))

方法二:用一個 array 內建的 function 叫做 reduce

function sum(arr){
 return arr.reduce(function(accumulator, value){
  return accumulator + value
  }, 0 //-> 這裡放初始值,很像 base 一樣,之後的數就會一直往上加,也可以不寫)
}

console.log(sum([-1, 1, 2, -2, 3, -3]))

accumulator 是一個累加器的感覺,第一個數加第二個數,出現一個值,然後再往後繼續累加。

這個方法可以做好多事的感覺,好像很有趣。


看影片:ALG101

Unit0:課程簡介,介紹 LIOJ 系統,練習 LIOJ 1001、LIOJ 1002
LIOJ 1001

var readline = require('readline');

var lines = []
var rl = readline.createInterface({
  input: process.stdin
});

rl.on('line', function (line) {
  lines.push(line)
});

rl.on('close', function() {
  solve(lines)
})

function solve(lines) {
  var line  = lines[0]
  var tmp = lines[0].split(' ')
  console.log(Number(tmp[0]) + Number(tmp[1]))
}

LIOJ 1002

var readline = require('readline');

var lines = []
var rl = readline.createInterface({
  input: process.stdin
});

rl.on('line', function (line) {
  lines.push(line)
});

rl.on('close', function() {
  solve(lines)
})

function solve(lines) {
 for(var i = 0; i < lines.length; i++){
    var tmp = lines[i].split(' ')
    var a = Number(tmp[0])
    var b = Number(tmp[1])

    if (a === 0 && b === 0) {
     return
    }
    if (a > b) {
        console.log(a)
    }else{
        console.log(b)
    }
 }
}

總結一下,簡單來說就是要用這個系統,上面的程式碼可以全部複製貼上,只要從最下面 function solve(lines) {} 開始寫程式碼就可以了。

因為題目規定在同一行輸入兩個數字,用空格分開,所以可以這樣表示:
var tmp = lines[i].split(' ')


看 Unit1 大綱
明天從「Unit1.1:What the funk,都說了先不要」開始










Related Posts

W23 + W24_直播檢討

W23 + W24_直播檢討

Spot the Difference - Difference in Difference

Spot the Difference - Difference in Difference

[BE201] 後端中階:ORM 與 Sequelize

[BE201] 後端中階:ORM 與 Sequelize


Comments