# U1.1、 先別急著寫 leetcode ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 學著不要太急著寫程式碼,寫程式和寫程式碼是兩回事,文章和寫字也是兩回事,在腦中想怎麼寫。 --- ## 寫程式的方法: 第一步,先想解法,像是寫文章一樣在腦中構思 (蠻花時間) 。 第二步,將解法轉成程式碼。 ## 解題分成: 用想的就知道解開方法。 1. 解得開但是花時間。 2. 解開且有效率。 3. 解不開,因為沒想法去轉換成程式碼。 光想就想不出來怎麼解。 ## 解題步驟: 1. 大概想解法。 2. 解法寫成虛擬碼 pseudo code (熟練後跳過) 。 3. 把虛擬碼翻譯成程式碼。 --- # U1.2、 虛擬碼 (pseudo code) ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 用抽象的方式表示解法的方式。 --- 寫出一行寫出一行行的執行步驟: 1. 一行只做一件事情,至多兩件。 2. 善用跳轉,讓他重複執行。 敘述 > 如果怎樣怎樣 > 重複。 --- ## 讓 1 到 100 之間的偶數全印出來~ 1. 敘述: 讓 i 成為 1 , 為設置初始條件。 2. 如果 i >100 就結束,判斷是不是該結束這個程式。 3. 印出 i , 做事情,要判斷偶數; 變成如果 i 是偶數就印出 i 。 4. i = i+1 、把 i+1 , 少掉這步驟其他步驟就不會結束了。 5. 跳回第二行,重複動作。 for(i = 1; i<100; i++) { console.log(++i) } if (i % 2 ===0) console.log(i) # U1.3、 寫出虛擬碼 (pseudo code) ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 在程式碼及人的想法中的橋樑,用抽象的方式來表示,長得很像程式碼。 ## 一步一腳印的虛擬碼 試著印出 100 。 將想出來的步驟: 1. 讓 i 成為 1 。 2. 如果 i >100 就結束。 3. 印出 i 。 4. i = i+1 。 5. 跳回第二行。 變成英文: 1. let i = 1 2. if i>100 then exit 3. print i 4. i = i+1 5. jump to line 2 然後是更像程式碼的虛擬碼: 1. for (i from 1 to 100) do 2. print i 3. end for --- # U1.4、 實戰: 印出 1-100 奇數 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 1. 敘述: 讓 i 成為 1 , 為設置初始條件。 2. 如果 i >100 就結束,判斷是不是該結束這個程式。 3. 印出 i , 做事情,要判斷奇數; 變成如果 i 是奇數就印出 i 。 4. i = i+1 、把 i+1 , 少掉這步驟其他步驟就不會結束了。 5. 跳回第二行,重複動作。 --- 1. for (i from 1 to 100) do 2. if (n mod 2 === 1) then 3. print i 4. end if 5. end for 第二行 if 開始到 end if 是一個區塊,來進行條判斷、做事情。 而從第一行開始到最後一行 end for 也是區塊。 mod 是取餘數。 自己 try 的實際寫法: for(var i = 1; i<100; i++) { console.log(i++) } if (i % 2 != 0 && i < 100) console.log(i) 有區塊的話可以縮排,空兩行,比較好讀。 --- # U1.5、 實戰: fizz buzz ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 題目 給一個數字 n 印出 1~n 但如果碰到 3 的倍數,改印出 Fizz 碰到 5 的倍數則改印 Buzz 若同時是 3 和 5 的倍數則印出 FizzBuzz 虛擬碼: for(i from 1 to n) do end for 執行: for (i from 1 to n) do if (i % 15 === 0) print "FizzBuzz" else if (i % 3 === 0) print "Fizz" else if (i % 5 === 0) print "Buzz" end for --- # U1.6、 實戰: 找最小值 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 一堆撲克牌,一張一張翻開,找最小值: let 最小的牌 = 第一張[0] for (i from 1 to n-1) do //從第一張開始翻 , array 是從 0 開始所以-1 ; 翻開第 i 張牌 if (第 i 張牌比最小牌的還小) do 最小的牌=第 i 張牌 end if end for 做一件事情做很多次,對每張牌判斷是不是比翻開的已知最小張小。 --- # U1.7、 Project 1 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 用虛擬碼解解看。 1. 字串反轉 怎麼把字串一個字一個字印出來? 給一個字串 str,請輸出 str 反過來的結果 範例輸入:hello 範例輸出:olleh try: 讓一個 str ='' 讓字串在哪裡可以執行 起始是 0 ,for( i from n-1 到最後一個0) do 讓 str = str + str[i] 印出 str 解: let s = '' for(i from n-1 to 0)do s+=str[i] end for printstr[i] 可以印出倒過來的字串(字串長度 n - 1) ; 把事情反過來做,原本是 0 到 n-1 , 因此從 n-1 到 0 先別印出來,在最外面宣告個變數讓字串存起來。 在迴圈內把每個字加倒 s 上面。 PS. 可以用 str[i] 取得第 i 個字,例如說 str="abc",str[0] 就是 'a' --- 2. 陣列總和 給一個陣列 arr,裡面全都包含了數字(整數),請輸出陣列加總的結果(總和保證不超過 int 範圍) 範例輸入:[1, 2, 3] 範例輸出:6 try: 0 是整數因此要包含 0 讓一個 sum = 0 起始是 0 , for(i from 0 to n-1 ) do let sum = sum+arr[i] end for 印出 sum 解: 結構和反轉字串類似。 ![](https://i.imgur.com/oZ4FZnc.png) 左邊反轉字串,右邊陣列總和。 --- 3. 找最大值 給一個陣列 arr,裡面全都包含了數字(整數),請輸出陣列中的最大值 範例輸入:[1, 2, 3] 範例輸出:3 try: 讓最大的牌 = arr[0] for(i from 0 to n-1) do 翻開第i張牌 if (第 i 張牌比最大牌的還大) do if(arr [i] > max) do 最大的牌= arr 的第 i 張牌 end if end for 印出 max 解: 跟找最小值類似。 ![](https://i.imgur.com/5xLr3wt.png) 左邊找最小值,右邊找最大值。 --- ** 圖片均為上課教材中所擷取供本人學習使用。 ---