let n = Number(lines[0]) //取得 LIOJ 第一行的數字
for (let i = 1; i <= n; i++) {
printTree(i, n)
}
for(let i = 1; i <= n; i++) {
printBottom(n)
}
function printTree(i, n) {
console.log(
repeat(' ', n - 1) +
repeat('*', 2 * i - 1)
)
}
function printBottom(n) { // 因為樹幹只有一根往下增生
console.log(
repeat(' ', n - 1) +
repeat('|'
)
}
function repeat(str, n) {
let result = ' '
for (let i = 1; i <= n; i++) {
result += str
}
return result
}
差異:我沒有弄那麼多 function ,直接使用兩個單獨的 for 迴圈。有時候太多 function 我反而會搞混。
印出 NM 乘法表
let N = Number(lines[0])
let M = Number(lines[1])
for (let k = 1; k <= N; k++) {
for (let i = 1; i <= M; i++) {
console.log(k + '*' + i + '=' + k*i) //console.log('${k}*${i}=${k*i}'
}
}
function digitsCount( ) { //回傳數字幾位數
if(0 <= n && n < 10) { //簡化:n < 10 即可
return 1
} else if (10 <= n && n < 100) { //簡化: n < 100 即可
return 2
} else if (n < 1000) { //簡化:1000 === 1e3
return 3
}
}
如何判斷幾位數方法二:除以十(老師在講方法一的時候我是想到方法二)
一個數字除十,每次無條件捨去,除幾次變成 0 就是幾位數。
let result = 0
if (n === 0) return 1 // edge case 處理
while(n != 0) {
n = Math.floor( n / 10)
result++
}
return result
}
如何取到各個數字:對 10 取餘數搭配除以 10 (我覺得這個第一次看很難懂)
結合所有 (我沒有放 digitsCount 的 function ,進 LIOJ 的時候要記得):
let temp = lines[0].split(' ')
let n = Number(temp[0])
let m = Number(temp[1])
for ( let i = n; i <= m; i++) {
if (isNarcissistic(i)) {
console.log(i)
}
}
function isNarcissistic(n) {
let m = n //宣告一個數字代替程式裡面會改變的 n
let digits = digitsCount(m)
let sum = 0
while(m != 0) {
let num = m % 10
sum += num ** digits // Math.pow(num, digits)
m = Math.floor( m / 10)
}
//可簡化成 return sum === n
if (sum === n) { //有宣告 m 這裡才可以使用到 n ,否則會是改變後的 n 即 0 。
return true
} else {
return false
}
}
偷吃步方法:
function isNstr(n) {
let str= n + ' ' // n.toString( ) String(n) 皆可
let digits = str.length
let sum = 0
for (let i = 0; i < str.length; i++) {
sum += Number(str[i])**digits
}
return sum === n
}
Project 4 老師的解法(我自己試寫的在昨天)
印出聖誕樹
差異:我沒有弄那麼多 function ,直接使用兩個單獨的 for 迴圈。有時候太多 function 我反而會搞混。
印出 NM 乘法表
差異:我用逗號分隔,老師用 + 連接,目前還沒研究差別是什麼。
印出水仙花數
老師說這題比較難,但我成功解出來了(雖然是用偷吃步的那個方法 XD,懶人下意識就是只能想到懶法?)。
如何判斷幾位數方法一:設置範圍(知道題目給予範圍前提下使用)
如何判斷幾位數方法二:除以十(老師在講方法一的時候我是想到方法二)
如何取到各個數字:對 10 取餘數搭配除以 10 (我覺得這個第一次看很難懂)
結合所有 (我沒有放 digitsCount 的 function ,進 LIOJ 的時候要記得):
偷吃步方法: