AB = A^2 + B^2 ?
AB = A^3 + B^3 ?ABCD = A^4 + B^4 + C^4 + D^4 ?
ABCD = A^3 + B^3 + C^3 + D^4 ?

解决方案 »

  1.   

    这个问题很简单啊,或者是我理解错了?Option ExplicitPrivate Sub Form_Load()
        Form1.AutoRedraw = True
        Dim intI As Integer, strI As String
        Dim intW4 As Integer, intW3 As Integer, intW2 As Integer
        Dim intW1 As Integer, intAll As Single
        For intI = 10 To 9999
            strI = CStr(intI)
            If Len(strI) = 2 Then
                intW2 = Left(strI, 1)
                intW1 = Right(strI, 1)
                intAll = intW2 ^ 2 + intW1 ^ 2
                If intAll = intI Then
                    Print intI
                End If
            End If
            If Len(strI) = 3 Then
                intW3 = Mid(strI, 1, 1)
                intW2 = Mid(strI, 2, 1)
                intW1 = Mid(strI, 3, 1)
                intAll = intW3 ^ 3 + intW2 ^ 3 + intW1 ^ 3
                If intAll = intI Then
                    Print intI
                End If
            End If
            If Len(strI) = 4 Then
                intW4 = Mid(strI, 1, 1)
                intW3 = Mid(strI, 2, 1)
                intW2 = Mid(strI, 3, 1)
                intW1 = Mid(strI, 4, 1)
                intAll = intW4 ^ 4 + intW3 ^ 4 + intW2 ^ 4 + intW1 ^ 4
                If intAll = intI Then
                    Print intI
                End If
            End If
        Next intI
    End Sub结果:
    153 
    370 
    371 
    407 
    1634 
    8208 
    9474
      

  2.   

    Private Sub Command1_Click()
        Dim i, j, k, l As Integer
        For i = 1 To 9
            For j = 1 To 9
                If i * 10 + j = i ^ 2 + j ^ 2 Then Print i & j
            Next j
        Next i
        For i = 1 To 9
            For j = 1 To 9
                For k = 1 To 9
                    If i * 100 + j * 10 + k = i ^ 3 + j ^ 3 + k ^ 3 Then Print i & j & k
                Next k
            Next j
        Next i
        For i = 1 To 9
            For j = 1 To 9
                For k = 1 To 9
                    For l = 1 To 9
                        If i * 1000 + j * 100 + k * 10 + l = i ^ 4 + j ^ 4 + k ^ 4 + l ^ 4 Then Print i & j & k & l
                    Next l
                Next k
            Next j
        Next i
    End Sub
      

  3.   

    Private Sub Command1_Click()
    For i = 10 To 9999
    Select Case Len(i)
    Case 2
    a = Mid(i, 1, 1): b = Mid(i, 2, 1)
    If a * a * a + b * b * b = i Then Print i
    Case 3
    a = Mid(i, 1, 1): b = Mid(i, 2, 1): c = Mid(i, 3, 1)
    If a * a * a + b * b * b + c * c * c = i Then Print i
    Case 4
    a = Mid(i, 1, 1): b = Mid(i, 2, 1): c = Mid(i, 3, 1): d = Mid(i, 4, 1)
    If a * a * a + b * b * b + c * c * c + d * d * d = i Then Print i
    End Select
    Next i
    End Sub
      

  4.   

    '算法如下:
    '一个n位的数等于它的各位数的n次方之和
    '如153等于1的3次方加上5的3次方加上3的3次方等等
    '要求求所有2,3,4位的水仙花数
    '**************************************************
    Dim IntStr As Long '数字长度
    Dim IngNumber As Long  '最高数字值
    Dim II As Long, JJ As Long
    Dim CurValue As Long '当前位数结果
    Dim CurStr As Long '当前位数长度IntStr = 5 '初始化位数
    '取得最大值
    IngNumber = 10 ^ IntStr - 1
    For II = 10 To IngNumber
        CurStr = Len(CStr(II))    '取得当前数字的位数
        For JJ = 0 To (CurStr - 1)
            CurValue = CurValue + CLng(Mid(II, JJ + 1, 1)) ^ 3
        Next
        If II = CurValue Then
            Print II
        End If
        CurValue = 0 '清空当前数据
    Next
    End Sub此算法算到5位,速度非常快,6位就很慢了
    实际上
    153 
    370 
    371 
    407 
    也就这么四个,四位数以上应该根本没有的;我已经尽量的没有使用判断了,就是循环也只是最小范围的循环,如果可以,可以尽量的优化一下
      

  5.   

    我也来凑凑热闹Private Function Func(ByVal Value As Long)    Dim lngValue    As Long
        Dim intDigits   As Integer
        Dim N           As Integer
        Dim intRemain   As Integer
        Dim lngSum      As Long
        
        intDigits = Fix(Log(Value) / Log(10)) + 1
        lngValue = Value
        
        N = intDigits
        Do While N > 0
            intRemain = lngValue Mod 10
            lngSum = lngSum + intRemain ^ intDigits
            lngValue = Fix(lngValue / 10)
            N = N - 1
        Loop
        
        Func = Value = lngSum
        
    End FunctionPrivate Sub Command1_Click()
        For i = 10 To 9999999
            If Func(i) Then Debug.Print i
        Next i
    End Sub'=====================================
    (花了好几分钟)
     153 
     370 
     371 
     407 
     1634 
     8208 
     9474 
     54748 
     92727 
     93084 
     548834 
     1741725 
     4210818 
     9800817 
     9926315 
      

  6.   

    '算法如下:
    '一个n位的数等于它的各位数的n次方之和
    '如153等于1的3次方加上5的3次方加上3的3次方等等
    '要求求所有2,3,4位的水仙花数
    '**************************************************
    Dim IntStr As Long '数字长度
    Dim IngNumber As Long  '最高数字值
    Dim II As Long, JJ As Long
    Dim CurValue As Long '当前位数结果
    Dim CurStr As Long '当前位数长度IntStr = 5 '初始化位数
    '取得最大值
    IngNumber = 10 ^ IntStr - 1
    For II = 10 To IngNumber
        CurStr = Len(CStr(II))    '取得当前数字的位数
        For JJ = 0 To (CurStr - 1)
            CurValue = CurValue + CLng(Mid(II, JJ + 1, 1)) ^ CurStr
        Next
        If II = CurValue Then
            Debug.Print II
        End If
        CurValue = 0 '清空当前数据
    Next'__________________________________结果如下
     153 
     370 
     371 
     407 
     1634 
     8208 
     9474 
     54748 
     92727 
     93084 上次给的答案错了一点点,呵呵,5位的用了3秒多,不算慢了
      

  7.   

    To  lovingkiss(交流技术不要分,请勿联系):1634 = 1^4 + 6^4 + 3^4 + 4^4
    54748 = 5^5 + 4^5 + 7^5 + 4^5 + 8^5
    9926315  = 9^7 + 9^7 + 2^7 + 6^7 + 3^7 + 1^7 + 5^7