Office中国论坛/Access中国论坛
标题:
编程题目(分割铅块)
[打印本页]
作者:
海狸先生
时间:
2005-11-1 22:44
标题:
编程题目(分割铅块)
有一40千克的铅块,把它分成4块(每块为整数重量),用这4块铅块作为天平称的砝码,可以称出1----40千克任何重量(整数重量)的物体,问:如何分割?
注意:
1.天平两边都可以放砝码。
2.以上所有的数值均为整数,而不是小数。
3.一次性称出重量,而不能分步称出,然后求其总和。
作者:
tmtony
时间:
2005-11-2 08:54
我有些晕
作者:
Trynew
时间:
2005-11-2 20:14
Public Sub Test()
Dim a As Integer, b As Integer, c As Integer, d As Integer, i As Integer
For a = 1 To 40: For b = a To 40: For c = b To 40: For d = c To 40
If a + b + c + d = 40 Then
For i = 1 To 39
If CheckNum(i, a, b, c, d) = False Then Exit For
Next
If i = 40 Then Debug.Print a & "," & b & "," & c & "," & d
End If
Next: Next: Next: Next
End SubPublic Function CheckNum(Num As Integer, w As Integer, x As Integer, y As Integer, z As Integer) As Boolean
For a = -1 To 1: For b = -1 To 1: For c = -1 To 1: For d = -1 To 1
If a * w + b * x + c * y + d * z = Num Then
CheckNum = True
Exit Function
End If
Next: Next: Next: Next
End Function
答案是:1,3,9,27(跟我用心算的结果一样,并且是唯一解 :)
作者:
海狸先生
时间:
2005-11-2 21:57
可以简化一下a肯定等于1,d 肯定等于 40-1-b-cPublic Sub Test()
Dim b As Integer, c As Integer, i As Integer
For b = 1 To 37
For c = b To 37
For i = 1 To 39
If CheckNum(i, b, c) = False Then Exit For
Next
If i = 40 Then Debug.Print "1," & b & "," & c & "," & 40 - 1 - b - c
Next
Next
End SubPublic Function CheckNum(Num As Integer, x As Integer, y As Integer) As Boolean
For a = -1 To 1
For b = -1 To 1
For c = -1 To 1
For d = -1 To 1
If a + b * x + c * y + d * (40 - 1 - x - y) = Num Then
CheckNum = True
Exit Function
End If
Next
Next
Next
Next
End Function
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3