D14_ ALG101


Posted by Christy on 2021-05-02

Unit2.5:實戰練習:找次大值

給第一個陣列 [5, 8, 6],找出陣列中的次大值

let arr = [5, 8, 6]
var max = -Infinity //一個假設值,比整數都還要小,但比零大
var max2 = -Infinity
for (i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
        max2 = max
        max  = arr[i]
        //這裡一開始有搞混,想像變數是箱子,如果找到一個目前最大值 10,
        //應該要先把最小值 5 拿出來不要,把次大值 6 的數字變成 8,
        //最大值的數賦予 10,順序不可以互換,這樣才合邏輯
    } else if (arr[i] > max2) {
        max2 = arr[i]
    }
}

console.log(max2)

Unit2.6:實戰練習:字串轉大寫

let str = 'Hi'
var ans = ' '
for (i = 0; i < str.length; i++) {
    if (str[i] >= 97 && str[i] <= 122) {//這樣寫是錯的,因為字母本人跟數字相加減不會變成另一個字母
        str[i] = string.fromCharCode(str[i] - 32)
    } else {
        ans += str[i]
    }
}
console.log(ans)
let str = 'Hi'
var ans = ' '
for (i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) {
    // 其實可以設一個變數叫做 code = str.charCodeAt(i); charCodeAt(i) 可以取得 ASCII Code
        ans += String.fromCharCode(str.CharCodeAt(i) - 32)
   //String.fromCharCode(ASCII Code相加減) -> 把 ASCII Code轉成字母     
    } else {
        ans += str[i]
    }
}
console.log(ans)
  • 所以有兩個重點:
    1. 要知道怎麼取得 ASCII Code
      str = 'abc'
      console.log(str.charCodeAt('a'))
      
    2. 要知道怎麼把 ASCII Code 轉成字母 String.fromCharCode(97 - 32)
    3. 要特別注意這兩個內建函式,用的是(),而不是 [],我一直打錯

Unit2.7:實戰練習:刪除特定字元

let str = 'apple'
let deleted = 'p'
let ans = ' '
for (i=0; i< str.length; i++) {
    if (str[i] !== deleted) {
        ans += str[i]
    }
}
console.log(ans)

Unit2.8:Project2 介紹

找次小值

let arr = [3, 8, 1]
let min = Infinity//找次小值,所以要設定值為無限大,才能比「小」
let min2 = Infinity
for (i=0; i<arr.length; i++) {
    if (arr[i] < min) {
        min2 = min
        min = arr[i]
    } else if (arr[i] < min2) {
        min2 = arr[i]
    }
}
console.log(min2)

大小寫互換

let str = 'HelLo'
let ans = ' '
for (i = 0; i < str.length; i++) {
    let code = str.charCodeAt(i)
    if (code >= 97 && code <= 122) {
        ans += String.fromCharCode(code -32)
    } else if (code >= 65 && code <= 90) {
        ans += String.fromCharCode(code + 32)
    }
}
console.log(ans)

印出因數:15 的因數 -> 1, 3, 5, 15

let number = 15
for (var i = 1; i <= number; i++) {
    if(number % i === 0) {
        console.log(i)
    } 
}
  • 真心覺得這些練習超棒的,可是一步一步找出自己的盲點

  • Unit3:寫程式前的最後一步:看懂題目
作業一:LIOJ 1010 靈魂伴侶

白話文:判斷兩數是否相等。是輸出 Yes,否輸出 No

問題:因為 Input 裡面有分數的範圍及正整數的提示,我想不到其他問題了

作業二:LIOJ 1015:音速小子

白話文:計算 t * 340 公尺的結果

問題:Input 提示為正整數,也有範圍

作業三:LIOJ 1017:貪婪的小偷

白話文:找出價值最高的物品,乘以件數就是答案

問題:Input 裡面也有範圍了,所以沒有問題

LIOJ 1020 判斷質數

  • 首先我把判斷是否為質數的函式寫出來,接著再把這個題目的條件加上去
function print(n) {
    if (n === 1) {
        return false
    }
    for (i = 2; i < n; i++) {
        if (n % i === 0) {
            return false
        } else return true
    }
}

console.log(print(5))









Related Posts

F2E合作社|讓Sublime幫忙整理程式碼

F2E合作社|讓Sublime幫忙整理程式碼

CSS保健室|background-attachment

CSS保健室|background-attachment

get this data in v-for

get this data in v-for


Comments