筆記、[ALG101] 看懂題目+寫程式


Posted by s103071049 on 2021-04-22

| 寫程式前,先考驗閱讀能力

輸入範圍的重要

| 不同範圍=不同輸入,沒有講清楚範圍就問清楚

常見限制

  1. 空間限制
    • 空間估算 : int ( 4 bytes)、double與JS的number ( 8 bytes)
    • Recall : 1 KB =1024 bytes

      同理,10億個數字需要的儲存空間
      8 * 1e8 /1024 = 781200 KB /1024 = 7600 MB = 7.4GB
  2. 時間限制
    • 先求有再求好,相關重點<big O >
  3. 型態限制

輸出入方式

| 分成兩類,函式、標準輸出入

  1. 函式
  2. 標準輸出入 : cat input.txt | node code.js

  • 用白話文改寫,並提出可能有問題的地方

HW(1)、LIOJ 1010:靈魂伴侶

  • 輸入兩個正整數,如果兩個數值相等,輸出YES,反之輸出NO
  • 數字範圍上沒有該注意的地方

HW(2)、LIOJ 1015:音速小子

  • 把一個數字承上340
  • 數字範圍上沒有該注意的地方

HW(3)、LIOJ 1017:貪婪的小偷

  • 取價值最高的 C 項物品
  • 數字範圍上沒有要注意的地方

寫程式的重要

(一)、函式填空法

  • 先寫架構,剩下再處理細節。
//虛擬碼
for (i from 1 to n-1) do 
   if( arr[i] is Prime) do
       print "Prime"
   else do 
       print "Composite"
   end if 
end for

// 程式碼 (變成函式
for (let i=0;i<arr.lenght;i++){
   if(isPrime([arr[i])){
      console.log("Prime")}
   else {
      console.log("Composite")}
      }
function isPrime(n){
    // todo 
    if(n===1) return false
    for(var i=2 ;i<n;i++){
       if(n%i===0){
          return false}
    }
    return true
}

(二)、簡化法

  • 難的解不出來,先解簡化版的。
//不會輸出 n 個,就先輸出一個
for(let i=0;i<=n;i++){
    console.log("*")
}
//搭配函式填空法
for(let i=0;i<=N;i++){
   printStar(i)}
function printStar(n){
   let result=""
   for(let i=1;i<=n;i++){
        result+="*"
    } 
   console.log(result)
 }

範例、金字塔

  • 規律 :
  1. 一共有n層
  2. 第i層有2i-1個星星
  3. 星星置中
  4. 需要n-i個空白
//空白 + 星星

for(let i=1;i<=n;i++){
    printLayer(i,n) //因為跟兩個都有關,需要兩個參數
}

functon printLayer(i,n){
    let str = repeat('',n-1)+repeat('*',2*i-1)
    console.log(str)
}

//加一個輔助函式
function repeat(str,n){
    let result=""

    for(let i=1;i<=n;i++){
        result+=str
    }
    return result
}

-----
// 簡潔一點
function main(n){
    for(let i=1;i<=n;i++){
        let str=repeat(" ",n-i)+repeat("*",2*i-1)
        console.log(str)
    }
}

function repeat(str,n){
    let s=''
    for(let i=1;i<=n;i++){
        s+=str
    }
    return s
}

main(3)

#看懂題目+寫程式







Related Posts

MTR04_1107

MTR04_1107

Day06 : Component 的三種長相

Day06 : Component 的三種長相

JavaScript 五四三 Ep.06 Array.prototype.includes()

JavaScript 五四三 Ep.06 Array.prototype.includes()


Comments