扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Private Sub Command1_Click() ''演示求X1+X2+X3+X4+X5=10整数解
Text1.Text = ""
Dim answer As String
answer = GETRESULT(5, 10, True) ''赋值
Dim temp
temp = Split(answer, vbCrLf)
For i = 0 To UBound(temp)
temp(i) = "解" & i + 1 & ":" & vbTab & temp(i) '' add index
Next
answer = Join(temp, vbCrLf)
Text1.Text = "方程 X1+X2+X3+X4+X5=10 共有 " & UBound(temp) + 1 & " 个整数解:" & vbCrLf & answer ''show all answer in textbox
End Sub
Private Sub Command2_Click() ''演示求X1+X2+X3+X4+X5=10非负整数解
Text1.Text = ""
Dim answer As String
answer = GETRESULT(5, 10, False) ''赋值
Dim temp
temp = Split(answer, vbCrLf)
For i = 0 To UBound(temp)
temp(i) = "解" & i + 1 & ":" & vbTab & temp(i) ''add index
Next
answer = Join(temp, vbCrLf)
Text1.Text = "方程 X1+X2+X3+X4+X5=10 共有 " & UBound(Split(answer, vbCrLf)) + 1 & " 个非零整数解:" & vbCrLf & answer ''show all answer in textbox
End Sub
Private Sub Command3_Click() ''演示无解情况
Text1.Text = ""
Dim answer As String
answer = GETRESULT(5, 3, False)
Dim temp
temp = Split(answer, vbCrLf)
For i = 0 To UBound(temp)
temp(i) = "解" & i + 1 & ":" & vbTab & temp(i)
Next
answer = Join(temp, vbCrLf)
Text1.Text = "方程 X1+X2+X3+X4+X5=3 共有 " & UBound(Split(answer, vbCrLf)) + 1 & " 个非零整数解:" & vbCrLf & answer
End Sub
''求解函数
Function GETRESULT(ByVal n As Integer, ByVal SUM As Integer, Optional allowzero As Boolean = True) As String
Dim temp() As String, i As Long
If n = 2 Then ''二元方程
If allowzero = True Then
ReDim temp(SUM)
For i = 0 To SUM '' allow zero
temp(i) = "X1=" & i & ",X2=" & SUM - i
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
Else
ReDim temp(1 To SUM - 1) ''forbid zero
For i = 1 To SUM - 1
temp(i) = "X1=" & i & ",X2=" & SUM - i
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
End If
End If
If n > 2 Then
If allowzero = True Then
ReDim temp(SUM)
For i = SUM To 0 Step -1 '' allow zero
temp(i) = Replace(GETRESULT(n - 1, i, True), vbCrLf, ",X" & n & "=" & SUM - i & vbCrLf) & ",X" & n & "=" & SUM - i
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
Else
If SUM < n Then MsgBox "无解!": Exit Function ''无解情况
ReDim temp(1 To SUM - n + 1) ''not allow zero
For i = 1 To SUM - n + 1
temp(i) = Replace(GETRESULT(n - 1, SUM - i, False), vbCrLf, ",X" & n & "=" & i & vbCrLf) & ",X" & n & "=" & i ''递归
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
End If
End If
End Function
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者