2012年2月13日 星期一

用正方體填滿

在進入社會找工作時,通常會經過面試的過程,來決定是否要錄用這個人。假設今天你

去一家程式設計公司面試,面試的主考官出了一道題目。請你設計一個程式來解決下面的問題:
給你一個長方體,請問最少要用幾個大小相同的正方體,才能把這個長方體填滿,你可以使用的正方體大小不限,長方體及正方體的邊長必須均為正整數。
輸入說明:
第一行的數字,代表有幾個長方體。第二行開始的每一行,記錄了每個長方體長寬高的邊長,邊長的範圍為[1, 1000]間的整數。
輸出說明:
對輸入的每個長方體,分別以一行輸出所使用正方體的個數。
輸入範例:
2
4 6 8
3 5 7
輸出範例:
24
105

5 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    For i = 1 To n
    Input #1, x, y, z
    For j = 2 To x
    If x Mod j = 0 And y Mod j = 0 And z Mod j = 0 Then
    x = x \ j
    y = y \ j
    z = z \ j
    End If
    Next
    ans = x * y * z
    Print #2, ans
    Next
    Close
    Close
    End
    End Sub

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    For i = 1 To n
    Input #1, x, y, z
    For c = 2 To x
    If (x Mod c = 0) And (y Mod c = 0) And (z Mod c = 0) Then
    x = x \ c
    y = y \ c
    z = z \ c
    End If
    Next c
    ans = x * y * z
    Print #2, ans
    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  3. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As 2
    Input #1, n
    For i = 1 To n
    Input #1, x, y, z
    For j = 2 To x
    If (x Mod j = 0) And (y Mod j = 0) And (z Mod j = 0) Then
    x = x \ j
    y = y \ j
    z = z \ j
    End If
    ans = x * y * z
    Next j
    Print #2, ans
    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  4. 小冰、晟晟、哲好,
    程式正確。
    就是最大公因數,最小公倍數的問題。題目將它敘述的很複雜,就是比賽常做的事。要能找出問題的解法。
    (問題的解法,正規的講法就叫--演算法)

    回覆刪除
  5. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    For i = 1 To n
    Input #1, h, w, l
    gon = 0
    For q = 1 To Val(h)
    If Val(h) Mod q = 0 And Val(w) Mod q = 0 And Val(l) Mod q = 0 Then
    gon = q
    End If
    Next q
    If gon > 1 Then
    ans = (Val(h) \ gon) * (Val(w) \ gon) * (Val(l) \ gon)
    Else
    ans = Val(h) * Val(w) * Val(l)
    End If
    Print #2, ans
    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除