导航
  • 全部
...

求一个拆分数字的算法。。。谢谢

oop2000 2003-12-29 09:04:42
从1-99这些数字中,按照6个一组,并且这6个数字相加的和等于一个用户输入的数字A,这个A在6-99之间。在6个一组的数字中,这6个数字可以重复。

谢谢啊。。。
...全文
给本帖投票
176 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2003-12-29
  • 打赏
  • 举报
回复
Function sums(ByVal sum As Long) As String
If sum < 6 Or sum > 99 Then
Exit Function
Else
Dim x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, x5 As Integer, x6 As Integer
Dim temp As String
temp = ""

For x1 = 1 To sum - 6
For x2 = x1 To sum - 6
For x3 = x2 To sum - 6
For x4 = x3 To sum - 6
For x5 = x4 To sum - 6
For x6 = x5 To sum - 6
If x1 + x2 + x3 + x4 + x5 + x6 = sum Then temp = temp & x1 & "," & x2 & "," & x3 & "," & x4 & "," & x5 & "," & x6 & vbCrLf
Next
Next
Next
Next
Next
Next
End If
sums = temp
End Function

Private Sub Command1_Click()
MsgBox sums(14)
End Sub
oop2000 2003-12-29
  • 打赏
  • 举报
回复
在顶。。。
oop2000 2003-12-29
  • 打赏
  • 举报
回复
顶。。。。
oop2000 2003-12-29
  • 打赏
  • 举报
回复
都有分。。。。。。。谢谢。。

jhzhou882 2003-12-29
  • 打赏
  • 举报
回复
穷举法简单.
六个循环.
好的算法应该有
liuyanghe111 2003-12-29
  • 打赏
  • 举报
回复
Function sums(ByVal sum As Long) As String

If sum < 6 Or sum > 99 Then
Exit Function
Else

Dim x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, x5 As Integer, x6 As Integer
Dim temp As String

temp = ""

For x1 = 1 To sum - 6
For x2 = 1 To sum - x1
For x3 = 1 To sum - x1 - x2
For x4 = 1 To sum - x1 - x2 - x3
For x5 = 1 To sum - x1 - x2 - x3 - x4

x6 = sum - x1 - x2 - x3 - x4 - x5

If x6 >= 1 And x6 <= 94 Then
temp = temp & x1 & "," & x2 & "," & x3 & "," & x4 & "," & x5 & "," & x6 & vbCrLf

End If

Next
Next
Next
Next
Next

End If

sums = temp

End Function

Private Sub Command1_Click()
MsgBox sums(14)
End Sub
oop2000 2003-12-29
  • 打赏
  • 举报
回复
噢。。我在看呢。。
谢谢大家帮忙。。谢谢。。都有分。。
liuyanghe111 2003-12-29
  • 打赏
  • 举报
回复
我犯傻了,最里层的一重循环可以去掉
liuyanghe111 2003-12-29
  • 打赏
  • 举报
回复
可能会出现重复的情况,自己过滤一下
liuyanghe111 2003-12-29
  • 打赏
  • 举报
回复
'借用一下 northwolves(野性的呼唤)的代码
Function sums(ByVal sum As Long) As String
If sum < 6 Or sum > 99 Then
Exit Function
Else
Dim x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, x5 As Integer, x6 As Integer
Dim temp As String
temp = ""

For x1 = 1 To sum - 6
For x2 = 1 To sum -x1
For x3 = 1 To sum - x1-x2
For x4 = 1 To sum - x1-x2-x3
For x5 = 1 To sum - x1-x2-x3-x4
For x6 = x1 To sum -x1-x2-x3-x4-x5
If x1 + x2 + x3 + x4 + x5 + x6 = sum Then temp = temp & x1 & "," & x2 & "," & x3 & "," & x4 & "," & x5 & "," & x6 & vbCrLf
Next
Next
Next
Next
Next
Next
End If
sums = temp
End Function

Private Sub Command1_Click()
MsgBox sums(14)
End Sub
northwolves 2003-12-29
  • 打赏
  • 举报
回复
有道理,多谢指教。但需要指出的是:
x1 + x2 + x3 + x4 + x5 + x6 = 94 有C(93,5)=51971283 种结果,算出来并没有什么现实意义。
flyingscv 2003-12-29
  • 打赏
  • 举报
回复
For x1 = 1 To sum - 6
For x2 = x1 To sum - 6
For x3 = x2 To sum - 6
For x4 = x3 To sum - 6
For x5 = x4 To sum - 6
For x6 = x5 To sum - 6

这个确实可以优化好多

1 因为x1----x6越来大
所以不需要to sum
大概意思是to sum-(x1+..xi-1)/(6-i),你自己看吧,我现在很懒了

2 For x6 = x5 To sum - 6
If x1 + x2 + x3 + x4 + x5 + x6 = sum Then
也是不需要的
直接x6=sum-x1-.....x5

这样修改结果没有额外计算和判断,只是列出所有组合,效率486应该也没问题



northwolves 2003-12-29
  • 打赏
  • 举报
回复
排列更多,递归也可以,但效率更低,下面是所有排列:

Function sums(ByVal sum As Long) As String
If sum < 6 Or sum > 99 Then
Exit Function
Else
Dim x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, x5 As Integer, x6 As Integer
Dim temp As String
temp = ""

For x1 = 1 To sum - 6
For x2 = 1 To sum - 6
For x3 = 1 To sum - 6
For x4 = 1 To sum - 6
For x5 = 1 To sum - 6
For x6 = 1 To sum - 6
If x1 + x2 + x3 + x4 + x5 + x6 = sum Then temp = temp & x1 & "," & x2 & "," & x3 & "," & x4 & "," & x5 & "," & x6 & vbCrLf
Next
Next
Next
Next
Next
Next
End If
sums = temp
End Function

Private Sub Command1_Click()
MsgBox sums(8)
End Sub
flyingscv 2003-12-29
  • 打赏
  • 举报
回复
晕,已经好多层了
flyingscv 2003-12-29
  • 打赏
  • 举报
回复
楼上说的很奇怪
northwolves 2003-12-29
  • 打赏
  • 举报
回复
x1 + x2 + x3 + x4 + x5 + x6 = 94 有C(93,5)=51971283 种结果,天文数字,P4也不过如此。
oop2000 2003-12-29
  • 打赏
  • 举报
回复
要所有符合条件的。。
比如输入数字7
应该得到:
2,1,1,1,1,1
1,2,1,1,1,1
1,1,2,1,1,1
1,1,1,2,1,1
1,1,1,1,2,1
1,1,1,1,1,2

如果这个数字很大比如98
那么这个循环的次数太多了。。。
oop2000 2003-12-29
  • 打赏
  • 举报
回复
谢谢楼上
但您是否考虑一个问题。就是如果我输入94,要执行多少次循环啊。。
这个效率太低了。而且,在发布软件后,不是所有的机器都是P4这样的。
谢谢您的帮忙。您看还有可能做得更好一点么?
谢谢

7,785

社区成员

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部