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)
- 所以有兩個重點:
- 要知道怎麼取得 ASCII Code
str = 'abc' console.log(str.charCodeAt('a'))
- 要知道怎麼把 ASCII Code 轉成字母 String.fromCharCode(97 - 32)
- 要特別注意這兩個內建函式,用的是(),而不是 [],我一直打錯
- 要知道怎麼取得 ASCII Code
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))