---
# System prepended metadata

title: U3.1、 翻譯題目，轉換成白話
tags: [Lidemy心得, 2020七月第三週, 7/19, 進度筆記, ALG 101, JavaScript]

---

# U3.1、 翻譯題目，轉換成白話
###### tags:  `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/19`

題目是會經過包裝的，需要累積閱讀能力。
讀懂題目來解題

---

## 幾個水桶

可以先列 2 的倍數出來:

20=16+4
20=8+8+4

今天給個數字 n 要用 2 的次方倍率，把數字拼出來，因此需要幾個數字?

**最小的五個水桶容量為 2 的 n 次方:**

1  $(2^0)$
2  $(2^1)$
4  $(2^2)$
8  $(2^3)$
16  $(2^4)$

再來為 32, 64, 128 ... 直到 2147483648 。
每次取水，帶最少的水桶，如 20 單位的水，帶 16 單位和 4 單位的水桶即可。  
所以是兩個水桶。

---

# U3.2、 輸入範圍
###### tags:  `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/19`

不同規模有不同的範圍要解決。
不同範圍 = 不同限制。
仔細看輸入範圍。
把範圍講清楚的題目就好寫，沒有就問到底這樣。

---

## 空間限制

### RAM 的量？

int : 4bytes
JavaScript Number : 8bytes
(8x兩百萬)/1024
兩百萬個數字為可占用並載入 15.625 MB RAM

### 陣列大小？

如果破幾十億就不太可能全部塞到陣列內。
排兩百萬數字跟排十幾個字用的方法有差。
範圍決定了方法。

[聯誼比大小](https://oj.lidemy.com/problem/1004)

## 時間限制

時間可以多久？（牽涉到時間複雜度）
用的解法比較慢但解得出來，改善效率。
初學先求有再求好。
big O ，演算法重要。

## 型態限制

常見型態的記憶體大小以及範圍要注意 。

**int : 大小在 -$(2^{31})$ 到 $(2^{31})$-1 之間。**

**Number : NumberMAX_SAFE_INTEGER 。**

數字無法想存多少就存多少。
超出 NumberMAX_SAFE_INTEGER 就無法精確的存取，因此 NumberMAX_SAFE_INTEGER+1 和 NumberMAX_SAFE_INTEGER+2 就一樣的，大概是 16 位(範圍的限制)。

**folat 精準度問題。**

0.1+0.2 != 0.3

因此可以取整數來解決，或四捨五入。

---

# U3.3、 輸入輸出方式
###### tags:  `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/19`

---

## 以函式為主

面試考試 LIOJ 都是這種。

---

## 標準輸出入方式為主

如 LIOJ 的制式輸出入，JavaScript 使用 `readline.createInterface` ， 就可從 `stdin` 讀取輸入。  
輸出接用 `console.log` 。


JS 可參考底下範例程式碼：
````
var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin
});

var lines = []

// 讀取到一行，先把這一行加進去 lines 陣列，最後再一起處理
rl.on('line', function (line) {
  lines.push(line)
});

// 輸入結束，開始針對 lines 做處理
rl.on('close', function() {
  solve(lines)
})

// 上面都不用管，只需要完成這個 function 就好，可以透過 lines[i] 拿取內容
function solve(lines) {

}
````

### `cat` `node` 指令

mac OS : cat xxx.txt | node xxx.js 
win OS : cat input.txt | env node code.js or cat input.txt | command node code.js 

---

# U3.4、 Project 3
###### tags:  `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/19`

三個題目，用白話文解釋，並提出在解題中有可能碰到的問題或是需注意地方。

---

## [LIOJ 1010：靈魂伴侶](https://oj.lidemy.com/problem/1010)

數字範圍沒有要注意的地方。

要怎麼衡量愛的價值 ?
身高、體重、血型、學校、興趣、喜好分數都要一致嗎 ?
怎麼衡量以上的分數 ?

輸入兩數值，如兩數值相同，輸出 Yes ; 否，則輸出 No 。
    
---
    
## [LIOJ 1015：音速小子](https://oj.lidemy.com/problem/1015)

數字應該沒有要注意的範圍問題。


他能跑無限遠嗎 ?
有時間範圍或是距離限制嗎 ?

我直接把一個數字*340 應該就是假定範圍。

---

## [LIOJ 1017：貪婪的小偷](https://oj.lidemy.com/problem/1017)

沒有範圍問題。

如果最大的數值有幾個一樣，有 2 個 5 那要判斷怎麼第幾個 5。

取得 3 個最大數值的總和。

---

**上課學習筆記。




