递归方法巧解不定方程

原创 2004年02月01日 23:15:00

       多元一次方程往往采用循环求解。笔者在与网友们讨论一个问题(http://expert.csdn.net/Expert/topic/2607/2607772.xml?temp=.7494928)过程中,琢磨出一种算法,采用递归进行多元一次方程的求解。并将解分为整数解和 非负整数解两种情况,请大家指教。

 

 

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

 

 

 

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

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

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

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

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

题目链接:http://poj.org/problem?id=2142——————————————–.The Balance Time Limit: 5000MS Memory Limit...
  • qq_33184171
  • qq_33184171
  • 2016年09月16日 17:15
  • 704

关于欧几里得算法和拓展欧几里德定理的证明(不定方程求解方法)

---------------------------------欧几里得算法和拓展欧几里得定理----------------------------------------------------...
  • qq_24451605
  • qq_24451605
  • 2015年07月24日 20:06
  • 1022

解递归式的方法总结

转载自:http://blog.csdn.net/a130098300/article/details/7632227 算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程...
  • G1036583997
  • G1036583997
  • 2015年07月16日 15:40
  • 1486

解的个数(扩展欧几里得解不定方程)

解的个数题目描述: 已知整数x,y满足如下面的条件: ax+by+c = 0 p
  • cax1165
  • cax1165
  • 2016年11月12日 19:34
  • 384

递归方程的求解

递归方程的求解 生成函数求解递归方程 生成函数及其性质 生成函数求递归方程 用特征方程求解递归方程 用递推法求解递归方程 用递推法求解常系数递归方程 用递推法求解变系数递归方程 函数换名 递归方程的求...
  • qu710458643
  • qu710458643
  • 2016年04月21日 13:01
  • 1106

佩尔方程求解问题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3292 题目大意:讲述的是滥竽充数的故事。有一个乐队,可以站成一个边长为x的正方形,也可以减去一个人...
  • AC_Gibson
  • AC_Gibson
  • 2015年06月26日 09:49
  • 1613

方程求近似解方法分析以及比较

对于一些单变量的方程f(x)会时常遇到求解问题,比如一元二次方程等。 数学中对于一元二次方程有明确的求解方法--比如,公式法,十字相乘法等【1】。 但是数学中一些方程的根无法明确表示,比如 sin(x...
  • XUE_HAIyang
  • XUE_HAIyang
  • 2014年07月19日 14:39
  • 1449

算法设计关于递归方程T(n)=aT(n/b)+f(n)之通用解法

在算法设计中经常需要通过递归方程估计算法的时间复杂度T(n),本文针对形如T(n)=aT(n/b)+f(n)的递归方程进行讨论,以期望找出通用的递归方程的求解方式。 算法设计教材中给出的Master...
  • lsp1991
  • lsp1991
  • 2014年10月08日 10:57
  • 2252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归方法巧解不定方程
举报原因:
原因补充:

(最多只允许输入30个字)