2011年2月10日 星期四

數列

輸入一大於1的正整數。平方後取其最小的數字為十位數(若為0則無十位數),最大的為個位數,組成一個2位數,再將此數平方,以上述方式再取得下一個數,直到重複才停止,請列出產生的數列,並標明重複的數。如輸入7則得下列結果:
輸入或產生的新數 平方 最小數 最大數 產生的新數
7 49 4 9 49
49 2401 0 4 4
4 16 1 6 16
16 256 2 6 26
26 676 6 7 67
67 4489 4 9 49
*49

※49重複則停止
輸入說明:大於1之正整數
輸出說明:依規則產生的數列,使用"*"標明重複產生之數字。

輸入範例:7

輸出範例:
7 49
49 2401
4 16
16 256
26 676
67 4489
*49 2401



參考http://chscvb.blogspot.com/2010/02/20100211.html

5 則留言:

  1. Dim tmp(999), ch(999)
    Private Sub Form_Load()

    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2

    Input #1, N

    For times = 1 To 999

    '--1--
    oldN = N
    N = N ^ 2

    For i = 1 To times
    If oldN = ch(i) Then Print #2, "*" & oldN; N: GoTo bye:
    Next
    ch(times) = oldN

    Print #2, oldN; N
    '--2--
    For i = 1 To Len(N)
    tmp(i) = Mid(N, i, 1)
    If maxs = 0 Or maxs < tmp(i) Then maxs = tmp(i)
    If mins = 0 Or mins > tmp(i) Then mins = tmp(i)
    Next
    '--3--
    N = mins & maxs

    maxs = 0
    mins = 0
    Next

    bye:

    Close #1
    Close #2
    End
    End Sub


    ---------------------------

    經測試過~應該是正確

    這題算蠻簡單的 不過我寫得卻有點複雜

    回覆刪除
  2. arro好,
    程式應該是正確,但是,
    1.你又是用for next來做條件迴圈,要學一下do loop的用法。
    2.你的變數初值的設定位置錯了吧。 maxs=0與mins=0,應該是在'--2---之後,而不是'--3--之後吧。
    3.For i = 1 To times這裡是不是該少一次呢?到times-1

    回覆刪除
  3. Dim N As Integer
    Dim N2 As Integer
    Dim RE As String
    Dim Low As Byte
    Dim High As Byte

    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Input #1, N
    Close #1



    Open App.Path & "\out.txt" For Output As #2

    Do

    N2 = (N ^ 2)

    If InStr(RE, CStr(N2)) >= 1 Then
    Print #2, "*" & N;
    RE = RE & "*"
    Else
    Print #2, N;
    End If

    Low = Right(N2, 1)
    High = Left(N2, 1)
    For i = 1 To Len(CStr(N2))
    If Mid(N2, i, 1) < Low Then Low = Mid(N2, i, 1)
    If Mid(N2, i, 1) > High Then High = Mid(N2, i, 1)
    Next i
    N = Low * 10 + High

    Print #2, N2
    RE = RE & CStr(N2) & ","

    Loop Until InStr(RE, "*") >= 1

    Close #2

    End
    End Sub

    回覆刪除
  4. 佑好,
    看到你們兩個都是在星期天貼上這幾題,心裡還是笑了一下,果然是放寒假的學生啊,哈,總是在結束前一天,努力趕作業。
    但是,要提醒一下,這樣子是不夠的哦。這些不是作業。這些是你們想要努力爭取的榮譽,如果只是當成作業,那是不是太自找麻煩了,資二的80個學生中,77個學生是不用這些作業的。加油。
    **
    程式應該正確。
    但是,1-字串的長度有沒有限制呢? 2-離開 do loop迴圈的地方,可以用exit do,會好些,你用了一個自製的梗,累了些。

    回覆刪除
  5. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    Dim CH$
    Print #2, Val(n) & " " & n ^ 2
    Do
    CH = CH & " " & n
    Call A1(n)
    If InStr(CH, n) <> 0 Then Print #2, "*" & Val(n) & " " & n ^ 2: Exit Do Else Print #2, Val(n) & " " & n ^ 2
    n = Val(n)
    Loop
    Close
    Close
    End
    End Sub

    Function A1(n)
    n = n ^ 2
    Dim Min%, Max%, NN
    Max = 0: Min = 9
    For i = 1 To Len(n)
    m = Mid(n, i, 1)
    If m > Max Then Max = m
    If m < Min Then Min = m
    Next
    NN = Min & Max
    n = NN
    End Function



    5:49

    回覆刪除