关于算法的问题

hszmplover 2004-08-13 02:02:45
关于算法的问题:假设我有一行数据为:0.12,0.34,0.5,0.3....,我现在要用算法找出它们之中的几个数相加等于1的所有解
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
futurezl 2004-08-13
  • 打赏
  • 举报
回复
我的那个好像不行
我改了一下没改过来
这个问题是组合,递归出来的是排列,
还是参考楼上的吧
northwolves 2004-08-13
  • 打赏
  • 举报
回复
穷举,递归都可以

可以参考:
http://community.csdn.net/Expert/topic/3205/3205871.xml?temp=7.362002E-02
futurezl 2004-08-13
  • 打赏
  • 举报
回复
试一下递归算法
http://community.csdn.net/Expert/topic/3253/3253020.xml?temp=.3577692
是不是和上面这个问题类似
把我的FORTRAN程序改一下
of123 2004-08-13
  • 打赏
  • 举报
回复
三楼的思路比较直观,可行,但要剔除全 0 和仅有一个 1 的情况。
route2 2004-08-13
  • 打赏
  • 举报
回复
用二进制的想法,每个数据置一个取用标记,0为不取用,1为取用,那么从全00000到全11111就是所有的取用可能,如标记1001就是取用0.12和0.3,对全0到全1做遍历,根据取用标记求和,为1即得一个解。
of123 2004-08-13
  • 打赏
  • 举报
回复
Dim myarr() As String
Dim myval() As Single
Dim myres() As Single
Dim i, j, k, n As Integer
Dim sum As Single

mydata = "0.12,0.34,0.5,0.3,0.28,0.6,0.56,0.2,0.5"
myarr = Split(mydata, ",")
ReDim myval(UBound(myarr))
For i = 0 To UBound(myarr)
myval(i) = Val(myarr(i))
Next i
For i = 0 To UBound(myval) - 1
n = 1
repeat:
sum = myval(i)
ReDim myres(0)
myres(0) = i
For j = (i + n) To UBound(myval)
sum = sum + myval(j)
ReDim Preserve myres(UBound(myres) + 1)
myres(UBound(myres)) = j
If sum >= 1 Then Exit For
Next j
If sum = 1 Then
For k = 0 To UBound(myres)
Debug.Print myval(myres(k)),
Next k
Debug.Print
End If
If n < UBound(myval) - i Then
n = n + 1
GoTo repeat
End If
Next i
dairy008 2004-08-13
  • 打赏
  • 举报
回复

简单但繁琐。 不考虑算法,用数据库解吧。

741

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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