hw1 好多星星
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) {
let N = Number(lines[0])
printStar(N)
}
function printStar(n) {
let star = ''
for (let j = 0; j < n; j++) {
star += '*'
console.log(star)
}
}
hw2 水仙花數
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) {
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 digitsCount(n) {
if (n === 0) return 1
let result = 0
while (n != 0) {
n = Math.floor(n / 10)
result ++
}
return result
}
function isNarcissistic(n) {
// 幾位數
let m = n
let digits = digitsCount(m)
let sum = 0
while (m != 0) {
let num = m % 10
sum += num ** digits
m = Math.floor(m / 10)
}
if (sum === n) {
return true
} else {
return false
}
}
}
hw3 判斷質數
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 (let i=1; i<=Number(lines[0]); i++) {
if (isPrime(Number(lines[i]))) {
console.log('Prime')
} else {
console.log('Composite')
}
}
}
function isPrime(n) {
if (n === 1) return false
for (let i=2; i<n; i++) {
if (n % i === 0) {
return false
}
}
return true
}
hw4 判斷迴文
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) {
let str = lines[0]
if (reverse(str) === str) {
console.log('True')
} else {
console.log('False')
}
}
function reverse(str) {
let result = ''
for (let i=str.length-1; i>=0; i--) {
result += str[i]
}
return result
}
一行解
function solve(lines) {
let str = lines[0]
console.log(
str.split('').reverse().join('') === str ? 'true' : 'false'
)
}
hw5 聯誼順序比大小
一開始有問題的版本
function solve(lines) {
let arrLength = Number(lines[0])
for (let i=1; i<= arrLength; i++) {
let a = Number(lines[i].split(' ')[0])
let b = Number(lines[i].split(' ')[1])
let k = Number(lines[i].split(' ')[2])
largerOrSmaller(a, b, k)
}
}
function largerOrSmaller(A, B, K) {
if (K === 1) {
if (BigInt(A) > BigInt(B)) {
console.log('A')
} else if (BigInt(A) === BigInt(B)) {
console.log('DRAW')
} else {
console.log('B')
}
} else {
if (BigInt(A) > BigInt(B)) {
console.log('B')
} else if (BigInt(A) === BigInt(B)) {
console.log('DRAW')
} else {
console.log('A')
}
}
}
修改後的版本
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) {
let arrLength = Number(lines[0])
for (let i=1; i<= arrLength; i++) {
let [a, b, k] = lines[i].split(' ')
if (k == 1) {
if (BigInt(a) > BigInt(b)) {
console.log('A')
} else if (BigInt(a) === BigInt(b)) {
console.log('DRAW')
} else {
console.log('B')
}
} else {
if (BigInt(a) > BigInt(b)) {
console.log('B')
} else if (BigInt(a) === BigInt(b)) {
console.log('DRAW')
} else {
console.log('A')
}
}
}
}
不使用 BigInt 的版本
function solve(lines) {
let arrLength = Number(lines[0])
for (let i=1; i<=arrLength; i++) {
let [a, b, k] = lines[i].split(' ')
console.log(largerOrSmaller(a, b, k))
}
}
function largerOrSmaller(a, b, k) {
const lengthA = a.length
const lengthB = b.length
if (a === b) {
return 'DRAW' // 一樣大
} else {
if (k == 1) { // 比大
if (lengthA === lengthB) {
for (let i=0; i<lengthA; i++) {
if (a[i] == b[i]) {
continue
} else {
return a[i] > b[i] ? 'A' : 'B'
}
}
} else {
return lengthA > lengthB ? 'A' : 'B'
}
} else { // 比小
if (lengthA === lengthB) {
for (let j=0; j<lengthA; j++) {
if (a[j] == b[j]) {
continue
} else {
return a[j] > b[j] ? 'B' : 'A'
}
}
} else {
return lengthA > lengthB ? 'B' : 'A'
}
}
}
}
課程解答的版本
function solve(lines) {
let arrLength = Number(lines[0])
for (let i=1; i<=arrLength; i++) {
let [a, b, k] = lines[i].split(' ')
console.log(largerOrSmaller(a, b, k))
}
function largerOrSmaller(a, b, k) {
if (a === b) {
return 'DRAW'
}
if (k == -1) {
let temp = b
b = a
a = temp
}
const lengthA = a.length
const lengthB = b.length
if (lengthA !== lengthB) {
return lengthA > lengthB ? 'A' : 'B'
}
return a > b ? 'A' : 'B'
}
hw6 前面五題解題心得
- #### 好多星星
- 注意 for 迴圈 console.log 的時機
把 printStar(n) 函式裡的 console.log() 寫在 for 迴圈之外,在 solve() 函式則要再多寫一個 for 迴圈,使其能一層一層遞增星星數。
function solve(lines) {
let N = Number(lines[0])
for (let i=1;i <= N; i++) {
printStar(i)
}
}
function printStar(n) {
let star = ''
for (let j = 0; j < n; j++) {
star += '*'
}
console.log(star)
}
直接將 console.log() 寫在 printStar() 裡的 for 迴圈裡面,這樣的寫法比較簡潔易懂。
function solve(lines) {
let N = Number(lines[0])
printStar(N)
}
function printStar(n) {
let star = ''
for (let j = 0; j < n; j++) {
star += '*'
console.log(star)
}
}
水仙花數
之前在上《先別急著寫 leetcode》時已經解過一次了,這次還是沒辦法順利解出來,不過再回去看筆記重新寫過幾次,把在迴圈中「重新賦值的時機」、「取餘數」、「位元運算」的概念再加深。判斷質數
1 既不是質數也不是合數,故傳入 isPrime() 函式的數字為 1,return false。判斷迴文
這題也是之前有解過,先寫一個 reverse() 函式,把字串倒轉過來,再回去判斷是否相等於原來的字串即可。聯誼順序比大小
這一題花好多時間,先使用 BigInt() 解題,一開始沒有意識到 使用 Number(), BigInt() 函式後的型別不一,導致測資一直無法通過。然後到 spectrum 上發問才重新寫過後,解決問題。接著挑戰不要用 BigInt() 來完成,這個過程了解到,可以利用 for 迴圈來判斷字串裡的數字大小,也知道了字串字典序大小的概念,也複習如何利用三元運算子。
ps. 題目描述的聯誼順序超有趣,在會講話的人後面自介使人「相形見絀」,而在不會講話的人後面發言則可以「藏拙」,實在將青澀的年少時期,在新團體中大家第一次自介的情景描繪地栩栩如生。