算法


前言

很久沒上來看了,此處來記錄一下之前用js做的幾個算法題。里面涉及動態規划、窮舉、迷宮、路徑等等。

jsfiddle

以下是題目

  1. 編程:斷開鏈條
    給定一個包含N個整數的數組A,假設這個數組表示的是一條鏈條,其中
    每個元素表示鏈條上的一環。 現在我們想把這條鏈條斷成3小部分。 我們需
    要做的就是斷開不相連的兩個環, 更確切的說,我們需要斷開環P、 Q
    ( 0<P<Q<N-1, Q-P > 1),得到三個小鏈條[0,P-1],[P+1,Q-1],[Q+1,N-1]。
    上述操作的成本是A[P]+A[Q]。
    例如:數組A為
    A[0] = 5
    A[1] = 2
    A[2] = 4
    A[3] = 6
    A[4] = 3
    A[5] = 7
    我們可以選擇如下方式斷開鏈條
  • ( 1, 3):成本是 2+6 = 8
  • ( 1, 4):成本是 2+3 = 5
  • ( 2, 4):成本是 4+3 = 7
    寫一個函數
    int breakchain(int A[], int N);
    對任一個給定的鏈條,返回斷開鏈條的最低成本,比如上面的例子中,
    需要返回最低成本5
    假設:
  • N是整數,范圍[5,100000]
    A的元素是范圍在[1,1000000000]的整數2. 編程: M個最大的數
    編程實現從N個無序數中選取M個最大的數( 0 < M < N )
  1. 編程: 最大方形
    給定一個元素是布爾型大小為N*M的矩陣A。 大小為L的方形可以放置在A
    中的( X,Y) 處, 如果滿足:
    0 < L <= min(N,M)
    0 <= X <= N-L
    0 <= Y <= M-L
    A[X+i][Y+j] = true, 0 <= i < L, 0 <= j < L
    如果L能被放置在( X,Y)以及( X+1,Y)或者( X,Y+1), 我們說它可以被
    從( X,Y) 移動到( X+1,Y)或者( X,Y+1)。
    我們想找出滿足以下條件的最大的L:
    L可以被放置在( 0,0)
    它可以被經過一系列的移動, 從( 0,0)到達( N-L,M-L)
    換句話說,我們想找到最大的方形,可以從左上移動到右下, 移動方式
    是向下或者向右移動。 一個極端情況是如果矩陣A中的元素全部是true,那
    么L = min(N,M)。
    寫一個函數: int move_square(int **A, int N, int M);
    返回值為L。比如:
    A[0][0]=true A[0][1]=true A[0][2]=true A[0][3]=false
    A[1][0]=true A[1][1]=true A[1][2]=true A[1][3]=false
    A[2][0]=true A[2][1]=true A[2][2]=true A[2][3]=false
    A[3][0]=true A[3][1]=true A[3][2]=true A[3][3]=true
    A[4][0]=false A[4][1]=true A[4][2]=true A[4][3]=true
    A[5][0]=true A[5][1]=false A[5][2]=true A[5][3]=true
    返回 2
    A[0][0]=true A[0][1]=true A[0][2]=false A[0][3]=false
    A[1][0]=true A[1][1]=false A[1][2]=false A[1][3]=false
    A[2][0]=false A[2][1]=true A[2][2]=false A[2][3]=true
    返回 0
    A[0][0]=true
    返回 1
    假設:
    N和M是范圍為[1,200]的整數
  2. 編程:順時針環繞列印矩陣元素
    給定一個整數元素組成的矩陣,寫一個函數,返回一個數組,數組中的元
    素是按照順時針遍歷矩陣中的元素而組成。例如如下的3x4矩陣:
    2, 3, 4, 8
    5, 7, 9, 12
    1, 0, 6, 10
    得到的數組的元素按照順序是“2, 3, 4, 8, 12, 10, 6, 0, 1, 5, 7, 9”.
  3. 問答題
    假設你英姿颯爽的站在120層摩天大樓的天台,手握兩個iphone(就是這
    么豪!),並且可輕易到達任一樓層的陽台。請用最少的嘗試次數, 確定能
    夠讓iphone自由下落而不會摔壞的最高層數。比如20層摔不壞, 21層就摔
    壞了。在嘗試中你可以摔壞這兩個iphone,只要能得到答案。請說明最壞
    情況需要多少次嘗試以及你的思路。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM