|
楼主 |
发表于 2010-1-2 22:24
|
显示全部楼层
生成數字部分的代碼
Sub 數字1()
On Error Resume Next
Dim 下限 As Long
Dim 上限 As Long
Dim 位數 As Long
下限 = 整數比大小表單.下限項.Value
上限 = 整數比大小表單.上限項.Value
位數 = 整數比大小表單.位數項.Value
整數比大小表單.數字1.Visible = True
Randomize
If 整數比大小表單.依範圍項.Value = True Then
整數比大小表單.數字1.Caption = 範圍取數(下限, 上限)
Else '依位數
If 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = False Then
整數比大小表單.數字1.Caption = 位數取數(位數)
ElseIf 整數比大小表單.正數項.Value = False And 整數比大小表單.負數項.Value = True Then
整數比大小表單.數字1.Caption = 位數取數(位數) * -1
ElseIf 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = True Then
整數比大小表單.數字1.Caption = 位數取數(位數) * (Int(Rnd * 2) * 2 - 1)
End If
End If
End Sub
Sub 數字2()
On Error Resume Next
Dim 下限 As Long
Dim 上限 As Long
Dim 位數 As Long
Dim 限差 As Long
Dim 數字1 As Long
Dim 同位數 As Long
Dim 暫存值 As Long
Dim 下限差 As Long
Dim 上限差 As Long
Dim 範圍陣列() As Variant
Dim 位數陣列() As Variant
Dim 限差陣列() As Long
Dim 範圍數 As Long
Dim 同位測試 As Boolean
下限 = 整數比大小表單.下限項.Value
上限 = 整數比大小表單.上限項.Value
位數 = 整數比大小表單.位數項.Value
限差 = 整數比大小表單.限差項.Value
數字1 = 整數比大小表單.數字1.Caption
同位數 = Len(CStr(Abs(數字1)))
同位測試 = False
整數比大小表單.數字2.Visible = True
'限差以外範圍陣列
If 整數比大小表單.依範圍項.Value = True And 整數比大小表單.限差項.Enabled = True And 限差 > 0 And 整數比大小表單.以外項.Value = True Then
ReDim 範圍陣列(上限 - 下限 + 1) As Variant
ReDim 限差陣列(限差 * 2 - 1) As Long
For X = 1 To 上限 - 下限 + 1
範圍陣列(X) = 下限 - 1 + X
Next X
For Y = 1 To 限差 * 2 - 1
限差陣列(Y) = 數字1 - 限差 + Y
Next Y
If 範圍陣列(1) > 限差陣列(1) Then
N = 1
For X = 1 To 上限 - 下限 + 1
For Y = N To 限差 * 2 - 1
If 範圍陣列(X) = 限差陣列(Y) Then
範圍陣列(X) = ""
N = Y + 1
Exit For
End If
Next Y
Next X
Else
N = 1
For Y = 1 To 限差 * 2 - 1
For X = N To 上限 - 下限 + 1
If 範圍陣列(X) = 限差陣列(Y) Then
範圍陣列(X) = ""
N = X + 1
Exit For
End If
Next X
Next Y
End If
範圍數 = 0
For X = 1 To 上限 - 下限 + 1
If Not 範圍陣列(X) = "" Then
範圍數 = 範圍數 + 1
範圍陣列(範圍數) = 範圍陣列(X)
End If
Next X
End If
'限差以外位數陣列
If 整數比大小表單.依位數項.Value = True And 整數比大小表單.限差項.Enabled = True And 限差 > 0 And 整數比大小表單.以外項.Value = True Then
ReDim 位數陣列(10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1) As Variant
ReDim 限差陣列(限差 * 2 - 1) As Long
If 整數比大小表單.正數項.Value = True Then
For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
位數陣列(X) = 10 ^ (位數 - 1) - 1 + X
Next X
ElseIf 整數比大小表單.負數項.Value = True Then
For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
位數陣列(X) = -10 ^ 位數 + X
Next X
End If
For Y = 1 To 限差 * 2 - 1
限差陣列(Y) = 數字1 - 限差 + Y
Next Y
If 位數陣列(1) > 限差陣列(1) Then
N = 1
For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
For Y = N To 限差 * 2 - 1
If 位數陣列(X) = 限差陣列(Y) Then
位數陣列(X) = ""
N = Y + 1
Exit For
End If
Next Y
Next X
Else
N = 1
For Y = 1 To 限差 * 2 - 1
For X = N To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
If 位數陣列(X) = 限差陣列(Y) Then
位數陣列(X) = ""
N = X + 1
Exit For
End If
Next X
Next Y
End If
範圍數 = 0
For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
If Not 位數陣列(X) = "" Then
範圍數 = 範圍數 + 1
位數陣列(範圍數) = 位數陣列(X)
End If
Next X
End If
'數字2
Randomize
If 整數比大小表單.依範圍項.Value = True Then
If 整數比大小表單.位數同項.Value = True And 整數比大小表單.位數不同項.Value = False Then
Do
Randomize
If 整數比大小表單.以內項.Value = True Then
下限差 = Application.WorksheetFunction.Max(下限, 數字1 - 限差)
上限差 = Application.WorksheetFunction.Min(上限, CLng(數字1) + 限差)
暫存值 = 範圍取數(下限差, 上限差)
Else '限差以外
If 限差 = 0 Then
暫存值 = 範圍取數(下限, 上限)
Else '限差 > 0
If 同位測試 = False Then
N = 0
For X = 1 To 範圍數
If Len(CStr(Abs(範圍陣列(X)))) = 同位數 Then
N = N + 1
End If
Next X
If N = 0 Then
整數比大小表單.數字2.Caption = "無解"
Exit Do
End If
同位測試 = True
End If
暫存值 = 範圍陣列(Int(Rnd * 範圍數 + 1))
End If
End If
If Len(CStr(Abs(暫存值))) = 同位數 Then
整數比大小表單.數字2.Caption = 暫存值
Exit Do
End If
Loop
ElseIf 整數比大小表單.位數同項.Value = False And 整數比大小表單.位數不同項.Value = True Then
If Len(CStr(Abs(下限))) = Len(CStr(Abs(上限))) And (下限 / 100 * 上限 >= 0 Or Len(CStr(Abs(下限))) = 1) Then
整數比大小表單.數字2.Caption = "無解"
Else
Do
Randomize
暫存值 = 範圍取數(下限, 上限)
If Not Len(CStr(Abs(暫存值))) = 同位數 Then
整數比大小表單.數字2.Caption = 暫存值
Exit Do
End If
Loop
End If
ElseIf 整數比大小表單.位數同項.Value = True And 整數比大小表單.位數不同項.Value = True Then
整數比大小表單.數字2.Caption = 範圍取數(下限, 上限)
End If
Else '依位數
If 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = False Then
If 整數比大小表單.以內項.Value = True Then
下限差 = Application.WorksheetFunction.Max(10 ^ (位數 - 1), 數字1 - 限差)
上限差 = Application.WorksheetFunction.Min(10 ^ 位數 - 1, CLng(數字1) + 限差)
整數比大小表單.數字2.Caption = 範圍取數(下限差, 上限差)
Else '限差以外
If 限差 = 0 Then
整數比大小表單.數字2.Caption = 位數取數(位數)
Else '限差 > 0
If 範圍數 > 0 Then
整數比大小表單.數字2.Caption = 位數陣列(Int(Rnd * 範圍數 + 1))
Else
整數比大小表單.數字2.Caption = "無解"
End If
End If
End If
ElseIf 整數比大小表單.正數項.Value = False And 整數比大小表單.負數項.Value = True Then
If 整數比大小表單.以內項.Value = True Then
下限差 = Application.WorksheetFunction.Max(-10 ^ 位數 + 1, 數字1 - 限差)
上限差 = Application.WorksheetFunction.Min(-10 ^ (位數 - 1), CLng(數字1) + 限差)
整數比大小表單.數字2.Caption = 範圍取數(下限差, 上限差)
Else '限差以外
If 限差 = 0 Then
整數比大小表單.數字2.Caption = 位數取數(位數) * -1
Else '限差 > 0
If 範圍數 > 0 Then
整數比大小表單.數字2.Caption = 位數陣列(Int(Rnd * 範圍數 + 1))
Else
整數比大小表單.數字2.Caption = "無解"
End If
End If
End If
ElseIf 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = True Then
整數比大小表單.數字2.Caption = 位數取數(位數) * (Int(Rnd * 2) * 2 - 1)
End If
End If
If 整數比大小表單.數字2.Caption = 數字1 Then
If Not (整數比大小表單.以內項.Value = True And 限差 = 0) Then
數字2
End If
End If
End Sub |
|