2011年3月5日 星期六

分解後次方和

求 1~100000 中,其分解的N次方和恰等於原來的數。
請依次方大小依序列出

( 2 <= N <= 10 )

範例:

153 = 1^3 + 5^3 + 3^3

輸出:

153 的 3 次方和與 153 相符
370 的 3 次方和與 370 相符
371 的 3 次方和與 371 相符
407 的 3 次方和與 407 相符
1634 的 4 次方和與 1634 相符
8208 的 4 次方和與 8208 相符
9474 的 4 次方和與 9474 相符
4150 的 5 次方和與 4150 相符
4151 的 5 次方和與 4151 相符
54748 的 5 次方和與 54748 相符
92727 的 5 次方和與 92727 相符
93084 的 5 次方和與 93084 相符

9 則留言:

  1. Private Sub Form_Load()
    Me.Hide

    Open App.Path & "\out.txt" For Output As #1
    Dim tmp, ch As Boolean, ins As String, ans

    For k = 2 To 10
    For L = 2 To 100000
    ins = L

    ans = 0
    For i = 1 To Len(ins)
    tmp = Mid(ins, i, 1)
    ans = ans + tmp ^ k
    Next
    If ans = Int(ins) Then Print #1, ins & " 的 " & k & " 次方和與 " & ins & " 相符"
    Next

    Next



    Close
    End

    End Sub



    //-------------------

    還蠻短的題目
    這種蠻暴力的解法

    回覆刪除
  2. arro好,
    程式正確。
    2個小地方,
    1.那個多出來的ins,和L有不同嗎?
    2.這個程式,還是用字串的方式去解數字,雖然說,黑貓白貓,能捉老鼠的,就是好貓。 再試試如果不用字串的解法呢?

    回覆刪除
  3. 先用簡單的來做,
    做出來跑得有點慢說。

    Private Sub Form_Load()
    Open App.Path & "\out.txt" For Output As #1

    For i = 2 To 100000
    For N = 2 To 10
    X = i
    Y = 0

    Do
    Y = Y + (X Mod 10) ^ N
    X = X \ 10
    If X = 0 And i = Y Then Print #1, i; "的"; N; "次方和與"; i; "相符": Exit For
    Loop Until X = 0


    Next N
    Next i

    Close #1
    End Sub

    回覆刪除
  4. Private Sub Form_Load()
    Me.Hide

    Open App.Path & "\out.txt" For Output As #1
    Dim tmp, ch As Boolean, ans

    For k = 2 To 10
    For L = 2 To 100000


    ans = 0
    For i = 1 To Len(Str(L))
    tmp = Val(Mid(Str(L), i, 1))
    ans = ans + tmp ^ k
    Next
    If ans = L Then Print #1, L & " 的 " & k & " 次方和與 " & L & " 相符"
    Next

    Next



    Close
    End

    End Sub


    //---------------------

    數字的作法是這樣子嗎!?

    回覆刪除
  5. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\out.txt" For Output As #1

    For n = 2 To 10
    For m = 2 To 100000
    S = m
    A = 0
    b = 0
    Do Until S = 0
    f = S Mod 10
    b = b + f ^ n
    S = S \ 10
    Loop
    If b = m Then Print #1, m & " 的 " & n & " 次方與 " & b & " 相符"
    Next m
    Next n

    Close #1
    End
    End Sub

    回覆刪除
  6. 153 的 3 次方與 153 相符
    370 的 3 次方與 370 相符
    371 的 3 次方與 371 相符
    407 的 3 次方與 407 相符
    1634 的 4 次方與 1634 相符
    8208 的 4 次方與 8208 相符
    9474 的 4 次方與 9474 相符
    4150 的 5 次方與 4150 相符
    4151 的 5 次方與 4151 相符
    54748 的 5 次方與 54748 相符
    92727 的 5 次方與 92727 相符
    93084 的 5 次方與 93084 相符

    回覆刪除
  7. 佑好,
    你的程式是可以做出這些答案,但是,雖然是個小題目,你的題目說明看錯了。「依次方大小依序列出」。
    不過,題目的說明還是有些不清楚,只有輸出是對的,但是那個範例,只是說明之一。

    arro好,
    不是。
    你還是用到len,mid這些字串的函數。
    雖然程式還是正確。

    緣尉好,
    程式正確。
    也利用這個程式,再去分清楚程式中,變數的「職務、責任」,任務單純些,不容易出錯。像那個S。
    而兩個迴圈的變數,n跟m,在迴圈中,可以拿來計算,但是,不要再去改變n和m的值了,也就是說不要拿n和m放在「=」號的左邊了。

    感覺今天一次三個小時,大家似乎比較有進展哦。看起來很令人高興。

    回覆刪除
  8. 熊掌好,

    我會仔細看清楚題目!!

    Private Sub Form_Load()
    Open App.Path & "\out.txt" For Output As #1
    For N = 2 To 10
    For i = 2 To 100000

    X = i
    Y = 0

    Do
    Y = Y + (X Mod 10) ^ N
    X = X \ 10
    If X = 0 And i = Y Then Print #1, i; "的"; N; "次方和與"; i; "相符"
    Loop Until X = 0



    Next i
    Next N
    Close #1
    End Sub


    153 的 3 次方和與 153 相符
    370 的 3 次方和與 370 相符
    371 的 3 次方和與 371 相符
    407 的 3 次方和與 407 相符
    1634 的 4 次方和與 1634 相符
    8208 的 4 次方和與 8208 相符
    9474 的 4 次方和與 9474 相符
    4150 的 5 次方和與 4150 相符
    4151 的 5 次方和與 4151 相符
    54748 的 5 次方和與 54748 相符
    92727 的 5 次方和與 92727 相符
    93084 的 5 次方和與 93084 相符

    回覆刪除
  9. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\out.txt" For Output As #2
    Call A1
    Close
    End
    End Sub

    Sub A1()
    '1~100000
    Dim k
    For i = 1 To 100000
    For x = 2 To 10
    k = 0
    For j = 1 To Len(i)
    m = Mid(i, j, 1)
    k = k + Val(m ^ x)
    Next
    If k = i Then Print #2, i & "的 " & x & " 次方和與 "; i & " 相符"
    Next
    Next

    End Sub

    3:07

    回覆刪除