从1-9中选择3个数字的所有组合,怎么计算呢?急!

totocn 2009-10-17 03:52:55
有从1到9共计9个数字,请问,如果三个一组,可以组合成多少个“三国联盟”?

备注:213组合和312组合,代表同一个组合,只要有三个数字在一起即可。

请问用vb如何实现,把所有组合都算出來?
...全文
3410 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuan027 2012-07-09
  • 打赏
  • 举报
回复
三个数字都不相同的话有53种,111、222、333、444、555、666、777、888、999、、112、113、114、115、116、117、118、119、、122、123、124、125、126、127、128、129、、133、134、135、136、137、138、139、、144、145、146、147、148、149、、155、156、157、158、159、、166、167、168、169、177、178、179、、188、189、、199
  • 打赏
  • 举报
回复
问题描述的有点不清楚

到底 "3个一组" 是算整个 "三国联盟" 还是算三国联盟中的一国

你的问题如果意思是 1~9 9个数字中 任取3个数字 有多少种组合 那就是 c(9,3)=84种
我1楼就是按照这个意思来解答的
yy830024 2009-10-17
  • 打赏
  • 举报
回复
UP
slowgrace 2009-10-17
  • 打赏
  • 举报
回复
3个数字要求互不相同么?
wozhidaode 2009-10-17
  • 打赏
  • 举报
回复
xuexi
totocn 2009-10-17
  • 打赏
  • 举报
回复
有那么多吗?只是三个数字一组而已哦
  • 打赏
  • 举报
回复
我看错题意了
原来要分成3组 每组3个
应该是1680种组合
vbman2003 2009-10-17
  • 打赏
  • 举报
回复
稍改一下:

Option Explicit

Sub Carry(a() As Long, ByVal m As Long, ByVal n As Long)
Dim Idx As Long
Idx = n
While a(Idx) = m
Idx = Idx - 1
m = m - 1
Wend
a(Idx) = a(Idx) + 1
While Idx < n
Idx = Idx + 1
a(Idx) = a(Idx - 1) + 1
Wend
End Sub

Sub PrintCom(a() As Long, n As Long)
Dim i As Long
ReDim tmp(n)
For i = 1 To n
tmp(i) = a(i)
Next
Debug.Print Trim(Join(tmp))
End Sub

Private Sub Command1_Click()

Dim m As Long, n As Long
Dim i As Long
m = 9
n = 3
ReDim a(m) As Long
For i = 1 To m
a(i) = i
Next
a(0) = -1
Do
DoEvents
Call PrintCom(a, n)
Call Carry(a, m, n)
Loop Until a(0) = 0

End Sub
vbman2003 2009-10-17
  • 打赏
  • 举报
回复
以上只是思路,代码不完善....
vbman2003 2009-10-17
  • 打赏
  • 举报
回复

Option Explicit

Sub Carry(a() As Long, ByVal m As Long, ByVal n As Long)
Dim Idx As Long
Idx = n
While a(Idx) = m
Idx = Idx - 1
m = m - 1
Wend
a(Idx) = a(Idx) + 1
While Idx < n
Idx = Idx + 1
a(Idx) = a(Idx - 1) + 1
Wend
End Sub

Sub PrintCom(a() As Long, n As Long)
Dim i As Long
ReDim tmp(n)
For i = 1 To n
tmp(i) = a(i)
Next
Debug.Print Trim(Join(tmp))
End Sub

Private Sub Command1_Click()
Dim m As Long, n As Long
Dim i As Long
m = 9
n = 3
ReDim a(m) As Long
For i = 1 To m
a(i) = i
Next

Do
DoEvents
Call PrintCom(a, n)
Call Carry(a, m, n)
Loop Until a(0) = 1
End Sub

贝隆 2009-10-17
  • 打赏
  • 举报
回复
1、9选3=84
2、6选3=20
3、3选3=1

总的组合数:84*20*1=1680
  • 打赏
  • 举报
回复
dim i as long,j as long,k as long
for i=1 to 7
for j=i+1 to 8
for k=j+1 to 9
debug.print i,j,k
next
next
next

1,065

社区成员

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

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