德·梅齐里亚克的法码问题The Weight Problem of Bachet de Meziriac     一位商人有一个40磅的砝码,由于跌落在地而碎成4块.后来,称得每块碎片的重量都是整磅数,而且可以用这4块来称从1至40磅之间的任意整数磅的重物.
    问这4块砝码碎片各重多少?

解决方案 »

  1.   

    等比数列问题(比例为q),或者q进制问题:
    q^0+q^1+q^2+q^3=40
    求q=?
    -->q=3
    所以:
    1、3、9、27
      

  2.   

    佩服 baizhj(baizhj) 
    一下就看到了本质
      

  3.   

    用G表示物品,Left、Right表示左右:
    ---------------------------------------------------
    Weight         | Left        |    Right
    ---------------------------------------------------
    1              | 1           |    G
    2              | 3           |    G + 1
    3              | 3           |    G
    4              | 1 + 3       |    G
    5              | 9           |    G + 1 + 3
    6              | 9           |    G + 3
    7              | 1 + 9       |    G + 3
    8              | 9           |    G + 1
    9              | 9           |    G
    10             | 1 + 9       |    G
    11             | 3 + 9       |    G + 1
    .....
      

  4.   

    把我的程序贴上吧,虽然不如 baizhj(baizhj) 的简洁
    毕竟也是心血,而且我的程序可以找到所有的满足条件的数(把40这个数换掉的话)
    Option Explicit
    Const MaxNum = 40
    Private Sub Command1_Click()
        getArr
    End Sub
    Private Sub getArr()
        Dim i As Long
        Dim j As Long
        Dim k As Long
        Dim m As Long
        
        txt1.Text = ""
        For i = 1 To MaxNum - 3
           For j = i To MaxNum - 3 - i
                For k = j To MaxNum - 3 - i - j
                    m = MaxNum - i - j - k
                    If m >= k Then
                        txt1.Text = txt1.Text & i & " " & j & " " & k & " " & m & " △△△△ "
                        If i = 1 And j = 2 And k = 4 And m = 8 Then
                            Debug.Assert False
                        End If
                        If CheckData(i, j, k, m) Then
                            Debug.Print i, j, k, m
                        End If
                    End If
                Next k
           Next j
        Next i
        Debug.Print "finsh!"
    End SubPrivate Function CheckData(X1 As Long, X2 As Long, X3 As Long, X4 As Long) As Boolean
        Dim t As Long
        Dim i As Long
        Dim j As Long
        Dim k As Long
        Dim m As Long
        Dim blnT(MaxNum) As Boolean
        Dim Num(4) As Long
        
        
        For i = 1 To MaxNum
            blnT(i) = False
        Next i
        Num(1) = X1
        Num(2) = X2
        Num(3) = X3
        Num(4) = X4
        '注意数组是有序的'Num(1)<=Num(2)<=Num(3)<=Num(4)    
        For i = -1 To 1
           For j = -1 To 1
                For k = -1 To 1
                    For m = -1 To 1
                         t = i * Num(1) + j * Num(2) + k * Num(3) + m * Num(4)
                         If t > 0 Then blnT(t) = True
                    Next
                Next
            Next
        Next
        
        
        For i = 1 To MaxNum
            If blnT(i) = False Then
                txt1.Text = txt1.Text & i & vbCrLf
                CheckData = False
                DoEvents
                Exit Function
            
            End If
        Next
        CheckData = True
    End Function
      

  5.   

    回复人: baizhj(baizhj) ( ) 信誉:100  2004-06-22 16:30:00  得分: 0  
     
     
       等比数列问题(比例为q),或者q进制问题:
    q^0+q^1+q^2+q^3=40
    求q=?
    -->q=3
    所以:
    1、3、9、27
      
     不明白你根据什么得到的!??讲讲好吗?
      

  6.   

    何不想想罗马数字(I,II,III,IV,V,VI...)
      

  7.   

    想过了,不知道楼上为什么提罗马数字(I,II,III,IV,V,VI...)
      

  8.   

    我的问题来自这个帖子,以后一段时间发一个大家一起研究。csdn人才真不少啊!
    http://community.csdn.net/Expert/topic/2883/2883535.xml?temp=3.181094E-02