递归方法巧解不定方程（二）

Private Sub Command1_Click()
Dim min(1 To 5) As Integer, max(1 To 5) As Integer, RESULT
min(1) = 2
min(2) = 3
max(1) = 3
max(2) = 7
jiefangcheng 5, min, max, 15

End Sub

'求解函数
Sub GETRESULT(ByVal n As Integer, ByRef min() As Integer, ByRef max() As Integer, ByVal SUM As Integer, Optional ByRef resultcount As Long, Optional ByRef RESULT)
Dim temp(), c() As Long, i As Long, j As Long, k As Long, r As Long

If n = 1 Then '一元方程
If SUM >= min(1) And SUM <= max(1) Then
resultcount = 1
ReDim RESULT(1 To 1, 1 To 1)
RESULT(1, 1) = SUM
End If
End If

If n > 1 Then
resultcount = 0
ReDim temp(min(n) To max(n))
ReDim c(min(n) To max(n))
For i = min(n) To max(n)
GETRESULT n - 1, min, max, SUM - i, c(i), temp(i)
resultcount = resultcount + c(i)
Next
If resultcount > 0 Then
ReDim RESULT(1 To resultcount, 1 To n)
For i = min(n) To max(n)
If c(i) > 0 Then
For j = 1 To UBound(temp(i), 1)
r = r + 1
For k = 1 To n - 1
RESULT(r, k) = temp(i)(j, k)
Next
RESULT(r, n) = i
Next
End If
Next
Erase temp
End If
End If

End Sub

Sub jiefangcheng(ByVal n As Integer, ByRef min() As Integer, ByRef max() As Integer, ByVal SUM As Integer, Optional ByRef RESULT)
Dim x() As String, i As Integer, msg As String, resultcount As Long, laptime As Single
laptime = Timer
'默认解的范围为1-SUM
For i = 1 To n
If min(i) = 0 Then min(i) = 1
If max(i) = 0 Then max(i) = SUM
Next

GETRESULT n, min, max, SUM, resultcount, RESULT '赋值

ReDim x(1 To n)
For i = 1 To n
x(i) = "X" & i
Next
msg = "方程" & Join(x, "+") & "=" & SUM

For i = 1 To n
x(i) = "X" & i & "∈[" & min(i) & "," & max(i) & "]"
Next
msg = msg & "当" & Join(x, ",") & " 时" '关于方程的表达式和解的定义域

If resultcount > 0 Then

Debug.Print msg & "共有 " & resultcount & " 个解"
ReDim x(1 To resultcount)
For i = 1 To resultcount
x(i) = "解" & i & "："
For j = 1 To n
x(i) = x(i) & "X" & j & "=" & RESULT(i, j) & vbTab
Next
Next
Debug.Print Join(x, vbCrLf)
Else

Debug.Print msg & "无解！"
End If
laptime = Timer - laptime
Debug.Print "总计用时" & IIf(laptime < 0, 0, Format(laptime, "0.000")) & "秒！"
End Sub

• 本文已收录于以下专栏：

递归方法巧解不定方程

多元一次方程往往采用循环求解。笔者在与网友们讨论一个问题（http://expert.csdn.net/Expert/topic/2607/2607772.xml?temp=.74949...
• northwolves
• 2004年02月01日 23:15
• 2166

Python100例——第五章----不定方程的解

# -*- coding: cp936 -*- #第五章----不定方程的解 #《c趣味编程》36-41题 #21:45 2006-11-4 def z36(): '''解不定方程 ...
• wdt3385
• 2013年07月19日 15:59
• 955

codeforces 17C C. Line(exgcd解不定方程)

• qq_24451605
• 2015年08月24日 12:00
• 565

POJ 2142 The Balance [不定方程和最小的正整数解]【数论】

• qq_33184171
• 2016年09月16日 17:15
• 775

POJ 1061（不定方程的最小正整数解）

• spring371327
• 2016年10月04日 14:31
• 318

poj 2115 C Looooops（解二元一次不定方程）

• slowlight93
• 2015年03月31日 19:44
• 554

HDU 5201 The Monkey King 组合数+不定方程解的个数

HDU 5201 The Monkey King 组合数+不定方程解的个数
• wzq_QwQ
• 2015年08月26日 20:25
• 1170

N元一次不定方程解法的C#实现

• LeoMaya
• 2006年12月07日 02:00
• 1387

关于不定方程整数解的个数的求法

• northwolves
• 2005年12月12日 21:07
• 1867

解的个数（扩展欧几里得解不定方程）

• cax1165
• 2016年11月12日 19:34
• 406

举报原因： 您举报文章：递归方法巧解不定方程（二） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)