內容 :
某工廠生產4種正立方體產品,邊長分別為1,2,3,4公分,該工廠的包裝箱為4*4*4公分(不計算包裝箱厚度),現在有若干筆訂單,每一筆訂購單可能包括各種產品但數量可能不同,請計算每一筆訂購最少各需要多少的包裝箱。
輸入說明 :
每行是一筆訂購單,由四個整數組成,每個整數以一個空白間格,依序分別代表邊長1,2,3,4公分的產品數量,每一個數量均為不大於20000的非負整數,以一個空白隔開。
輸出說明 :
輸出各筆訂購的最少包裝箱數目,每一筆一行。
範例輸入 :
5 4 8 2
12 14 32 7
範例輸出 :
11
41
做完回去看學長的做法,
回覆刪除學長的做法有點不懂=口=!!
Private Sub Form_Load()
Dim A(4) As Integer
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do While Not EOF(1)
Input #1, A(1), A(2), A(3), A(4)
ans = A(4)
Do
ans = ans + 1
A(3) = A(3) - 1
If A(1) - 37 < 0 Then A(1) = 0 Else A(1) = A(1) - 37
Loop Until A(3) = 0
If A(2) Mod 8 = 0 Then
ans = ans + A(2) \ 8
Else
ans = ans + A(2) \ 8 + 1
End If
Print #2, ans
Loop
Close #2
Close #1
End
End Sub
佑好,
回覆刪除程式不正確。(原先我還以為正確呢,邊寫下面改進點時發現,剩下的a(1)呢?如果a(1)很大呢?)
改進點:
Do
ans = ans + 1
A(3) = A(3) - 1
If A(1) - 37 < 0 Then A(1) = 0 Else A(1) = A(1) - 37
Loop Until A(3) = 0
這個迴圈沒必要,直接改成3行程式
ans=ans+a(3)
a(1)=a(1)-a(3)*37
if a(1)<0 then a(1)=0
熊掌好,
回覆刪除對好小細節沒注意到,
重寫了一次
改進點
一個增
一個減有看出關係了
我把if a(1)<0 then a(1)=0也給省略掉了
應該沒有關係吧
Private Sub Form_Load()
Dim A(4) As Integer
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do While Not EOF(1)
Input #1, A(1), A(2), A(3), A(4)
'4
ans = A(4)
'3
ans = ans + A(3)
A(1) = A(1) - (A(3) * 37)
'2
If A(2) Mod 8 = 0 Then
ans = ans + A(2) \ 8
Else
ans = ans + A(2) \ 8 + 1
If A(1) > 0 Then A(1) = A(1) - (64 - (A(2) Mod 8) * 8)
End If
'1
Do While A(1) > 0
ans = ans + 1
A(1) = A(1) - 64
Loop
Print #2, ans
Loop
Close #2
Close #1
End
End Sub
佑好,
回覆刪除程式正確。
改進點1:
If A(1) > 0 Then A(1) = A(1) - (64 - (A(2) Mod 8) * 8)
這兒反而可以不用管a(1)原本值,反正就去減。
(如原先小於0,你要做if一個指令,如果大於0,你要做2個指令)
(還不如,直接做1個指令,反正,下面還會檢查一次)
改進點2:
Do While A(1) > 0
ans = ans + 1
A(1) = A(1) - 64
Loop
這兒如果是a(1)是20000你要迴圈做幾次啊?
直接數學運算一下就好了吧。
if a(1)>0 then
ans=ans + a(1) \64
if a(1) mod 64 <>0 then ans=ans +1
end if
熊掌好,
回覆刪除對耶就跟我省略的
if a(1)<0 then a(1)=0
一樣
ans=ans + a(1) \64這邊方法跟3.一樣
謝謝老師了
If A(2) Mod 8 = 0 Then
ans = ans + A(2) \ 8
Else
ans = ans + A(2) \ 8 + 1
A(1) = A(1) - (64 - (A(2) Mod 8) * 8)
End If
'1
If a(1)>0 then
ans=ans + a(1) \64
If a(1) mod 64 <>0 then ans=ans +1
End if
Dim Size As Integer, a1, a2, a3, a4, ans, sp
回覆刪除Private Sub Form_Load()
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Size = 4 * 4 * 4
Do While Not EOF(1)
Input #1, a1, a2, a3, a4
ans = 0
ans = a4 + a3
sp = a3 * 37
sp = sp - a1
If a2 \ 8 <> 0 And a2 Mod 8 <> 0 Then ans = ans + (a2 \ 8) + 1: sp = sp + 64 - ((a2 Mod 8) * 8)
If a2 \ 8 <> 0 And a2 Mod 8 = 0 Then ans = ans + (a2 \ 8): sp = sp + 64 - ((a2 Mod 8) * 8)
If a2 \ 8 = 0 Then ans = ans + 1: sp = sp + (64 - a2)
If sp < 0 And sp Mod 64 = 0 Then ans = ans + (sp \ 64)
If sp < 0 And sp Mod 64 <> 0 Then ans = ans + (sp \ 64) + 1
Print #2, ans
Loop
Close
Close
End Sub