【算法】反求 一个值是已知数组中某几个元素值的和

xiaoxiaoP 2007-01-17 05:35:43
如题:

int a = 11;
int[] x = new int[]{2,7,5,3,4};

求 11 = 2 + 5 + 4;或者 11 = 7 + 4;


好久没来了,顺便向坚守vb的人们致敬......
...全文
255 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiaoP 2007-01-25
  • 打赏
  • 举报
回复
有没有能处理C(100,10)这样大的好办法?如何处理类似于死循环的方法?再顶一下。
yachong 2007-01-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim num(1 To 10) As Long
Dim i As Long
For i = 1 To 10
num(i) = i
Next

For i = 1 To 10
SumX CStr(num(i)), num(i), 11, i + 1, num
Next
End Sub

Private Sub SumX(strPre As String, nOp1 As Long, nSum As Long, nStart As Long, aArr() As Long)
Dim i As Long
For i = nStart To UBound(aArr)
If nOp1 + aArr(i) = nSum Then
Debug.Print strPre & "+" & CStr(aArr(i)) & "=" & CStr(nSum)
End If

SumX strPre & "+" & CStr(aArr(i)), nOp1 + aArr(i), nSum, i + 1, aArr()
Next
End Sub
truewill 2007-01-20
  • 打赏
  • 举报
回复
贪婪法咯
排序
选合适而又最大那个,一直选下去咯
xiaoxiaoP 2007-01-20
  • 打赏
  • 举报
回复
是啊,看来没什么好办法了.
of123 2007-01-18
  • 打赏
  • 举报
回复
循环穷举而已。你可以设置一些判断来减少计算量,例如,预先升序排序,当计算到结果已经大于目标值时,就跳出当前循环。
xiaoxiaoP 2007-01-18
  • 打赏
  • 举报
回复
上面是网上组合的例子,我发现组合的个数惊人,我的电脑死机
xiaoxiaoP 2007-01-18
  • 打赏
  • 举报
回复
对象:
Form1
Text1
Command1
Command2


Option Explicit

Type Ntype
Num As Integer
Select As Boolean
End Type

Public N() As Ntype
Public Pointer As Integer

Public Function ShowSNum() As String '显示已选的数
Dim I As Integer, tmp As String
For I = 1 To Pointer
If N(I - 1).Select Then
tmp = tmp & Str(N(I - 1).Num) & " "
End If
Next I
ShowSNum = tmp
End Function

Public Function NSelect() As Integer '已选数的个数
Dim I As Integer, S As Integer
S = 0
For I = 1 To Pointer
If N(I - 1).Select Then
S = S + 1
End If
Next I
NSelect = S
End Function

Public Function ShowAll(P As Integer) As String '显示函数
Dim I As Integer
If NSelect = 10 Then
ShowAll = ShowSNum + Chr(13) + Chr(10)
Else
For I = P To Pointer '体现选择的单向性,因为是组合不是排列
N(I - 1).Select = True
Form1.Text1.SelText = ShowAll(I + 1) '用一个文本框保存结果
N(I - 1).Select = False
Next I
End If
End Function
Private Sub Command1_Click()
Dim I As Integer
Pointer = InputBox("想生成几个数据?", "Input Number")
ReDim N(Pointer - 1)
N(0).Num = Int(Rnd(1) * 10)
N(0).Select = False
Text1.SelText = Str(N(0).Num) & " "
For I = 1 To Pointer - 1
N(I).Num = N(I - 1).Num + Int(Rnd(1) * 5 + 1)
N(I).Select = False
Text1.SelText = Str(N(I).Num) & " "
Next I
Text1.SelText = Chr(13) & Chr(10)
End Sub

Private Sub Command2_Click()
ShowAll (1)
End Sub


  • 打赏
  • 举报
回复
递归吧
xiaoxiaoP 2007-01-17
  • 打赏
  • 举报
回复
只是用vb.net说明一下,用什么无所谓,主要是算法
yangao 2007-01-17
  • 打赏
  • 举报
回复
VB.net啊

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧