輸入一大於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
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
---------------------------
經測試過~應該是正確
這題算蠻簡單的 不過我寫得卻有點複雜
arro好,
回覆刪除程式應該是正確,但是,
1.你又是用for next來做條件迴圈,要學一下do loop的用法。
2.你的變數初值的設定位置錯了吧。 maxs=0與mins=0,應該是在'--2---之後,而不是'--3--之後吧。
3.For i = 1 To times這裡是不是該少一次呢?到times-1
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
佑好,
回覆刪除看到你們兩個都是在星期天貼上這幾題,心裡還是笑了一下,果然是放寒假的學生啊,哈,總是在結束前一天,努力趕作業。
但是,要提醒一下,這樣子是不夠的哦。這些不是作業。這些是你們想要努力爭取的榮譽,如果只是當成作業,那是不是太自找麻煩了,資二的80個學生中,77個學生是不用這些作業的。加油。
**
程式應該正確。
但是,1-字串的長度有沒有限制呢? 2-離開 do loop迴圈的地方,可以用exit do,會好些,你用了一個自製的梗,累了些。
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