D12_綜合題目練習 Lv1


Posted by Christy on 2021-04-30

練習八:回傳陣列裡面所有小於 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 (i=0; i<arr.length; i++) {
        if (arr[i] < n) {
            sum += arr[i]
        }
    }
    return sum
}

console.log(findSmallerTotal([1, 2, 3], 3))
  • 在解這題的時候,我發現我的想法好雞肋,我的想法是:
    先找出所有小於 n 的數,再把這些數放進陣列裡面,再把那個陣列加起來。老師的解答寫得好簡單,我好像每次解題都不夠直接,假設現在題目要我求總和,我應該就把目標放在總和就好了。
    我幹嘛兜那個多圈,我又不是林宥嘉。

練習九:回傳陣列裡面所有小於 n 的數

請寫一個函式 findAllSmall,接收一個陣列跟一個數字 n,回傳一個裡面有所有小於 n 的數的陣列(需按照原陣列順序)。

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

findAllSmall([1, 2, 3], 2) 正確回傳值:[1]
findAllSmall([1, 3, 5, 4, 2], 4) 正確回傳值:[1, 3, 2]

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

console.log(findAllSmall([1, 3, 5, 4, 2], 4))
  • 在解這題的時候,學到了要怎麼把陣列裡面的數放進另一個陣列,首先我要有一個空的陣列,然後用answer.push(arr[i]) 把他們放進去,這行程式碼我還呆呆地在前面寫了一個不知所云的 console.log

練習十:回傳陣列總和

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

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

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

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

console.log(sum([-1, 1, 2, -2, 3, -3]))
  • 內建的陣列函式,叫做 reduce: 從影片 JS101 -> 請自己想過、試過再來看這些講解影片 -> 練習十:回傳陣列總和 2:28 開始

假設練習十用 reduce 這個方法解題,就變成下面的樣子

function sum(arr) {
    return arr.reduce(function(accumulator, currentValue) {
        return accumulator + currentValue
    })
}

console.log(sum([1, 2, 3, 4, 5]))
//accumulator, currentValue 可以自己取名稱

  • ALG101:首先要習慣 LIOJ 的格式,所以先看操作影片,其中卡住的地方是我不知道為什麼要寫 var tmp = lines[0].split(' '),研究的結果發現,這是在規定格式,最後的程式碼應該長這樣

A+B

Description

每一個 Online Judge 都會有的基本題目,讓你熟悉 OJ 的使用方式。

給定兩個正整數 a 與 b,輸出 a + b 的結果。

Input
0 <= a, b <= 2^30

Output
兩數相加後的結果

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)
})
// 從這裡以上的程式碼都可以複製貼上,只要改下面的就好了。

// 這個題目可以想成是「寫一個叫做 solve 的函式,接收一個陣列 lines,要輸出兩數相加 a + b」

function solve(lines) {
    var tmp = lines[0].split(' ') //陣列 lines 第一個值,後面用空白分開
    console.log(Number(tmp[0])+Number(tmp[1]))//把陣列裡面的第一個數加上第二個數就是答案,但是要記得把他們轉成數字
}
  • 我覺得 LIOJ 難的地方在於它的格式,並不是解完程式碼可以跑就好了,要在那個環境下符合題目的格式,像是輸入總共三行,第一個數跟第二個數用空白分割,而且還要讓程式碼去跑這三行,寫這些東西才是比較難的地方,也就是說,我應該要先把格式寫出來,然後再用大括號把我要做的事情包起來。
    -> 先照顧格式然後再照顧內容

數字比大小

Description

輸入一共有許多行,每一行都包含兩個正整數 a, b

請輸出這兩個之中比較大的那個數字

若是碰到 a=b=0 代表輸入結束

Input
用空格隔開的兩正整數 a 與 b

0 <= a, b <= 2^{31}-10<=a,b<=2
31
−1

Output
針對每一筆測試資料,請輸出比較大的那個數字,若是兩個一樣大則輸出任意一個數字皆可

若是碰到 a=b=0 代表輸入結束,請勿做任何處理

//像這個寫法就是錯的,因為這樣只能跑一次而已
function solve(lines) {
    var tmp = lines[0].split(' ')
    if (tmp[0] > tmp[1]) {
        return tmp[0]
    } else if (tmp[0] < tmp[1]){
        return tmp[1]
    } else {
        return
    }    
}
console.log(tmp)
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)
})

// 寫一個叫做 solve 的函式,接收陣列 lines,這些陣列分成一行一行的。
// 要輸出比較大的那個數,如果 a === b 就不要執行

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)
        }
    }
}

2. 陣列總和

給一個陣列 arr,裡面全都包含了數字(整數),請輸出陣列加總的結果(總和保證不超過 int 範圍)

範例輸入:[1, 2, 3]

範例輸出:6

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

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









Related Posts

Leetcode: Geometry Problems

Leetcode: Geometry Problems

[ 筆記 ] 產品需求文件(參考資料) & Final Project 構思紀錄

[ 筆記 ] 產品需求文件(參考資料) & Final Project 構思紀錄

[ week 4 ] HTTP協定

[ week 4 ] HTTP協定


Comments