从16个数任取4个组成一个数
我想编个程序
统计出有多少种组合(不是排列哦)
并把所有可能的组合列出来
4个数不管怎么排列都算一种组合。
例如:
1234
1243
1324
1342
-----
4312
4321
共24个数只当作一种组合
我只要写出1234就可以了。
也就是说只列出从小到大排列的组合。
我想编个程序
统计出有多少种组合(不是排列哦)
并把所有可能的组合列出来
4个数不管怎么排列都算一种组合。
例如:
1234
1243
1324
1342
-----
4312
4321
共24个数只当作一种组合
我只要写出1234就可以了。
也就是说只列出从小到大排列的组合。
c(?,?)
忘记了,高中数学课本里面就有的算法hoho
组合数=16*15*14*13还是你想列出所有的组合?
那用4个循环就行了for i=1 to 13
for j=2 to 14
for k=3 to 15
foi l=4 to 16
print i,j,k,l
next l
next k
next j
next i
for i1=1 to 16
for i2=1 to 16
for i3=1 to 16
for i4=1 to 16
if(i1<>i2)and(i1<>i3)(i1<>i4)and(i2<>i3)and(i2<>i4)and(i3<>i4) then
print i1;i2; i3; i4
end if
next i4
next i3
next i2
next i1
这代码比你的好吧
我要的是组合啊。
看清楚我的问题先
for i1=1 to 16
for i2=i1 to 16
for i3=i2 to 16
for i4=i3 to 16
print i1;i2; i3; i4
end if
next i4
next i3
next i2
next i1
Option Explicit
Private Sub Command1_Click()
Dim i1, i2, i3, i4 As Integer
Dim Cou As Long
Cou = 0
Text1.Text = ""
Dim Maxn As Integer
Maxn = 12
For i1 = 1 To Maxn - 3
For i2 = i1 + 1 To Maxn - 2
For i3 = i2 + 1 To Maxn - 1
For i4 = i3 + 1 To Maxn
Text1.Text = Text1.Text & i1 & ";" & i2 & ";" & i3 & ";" & i4 & " "
Cou = Cou + 1
Next i4
Next i3
Text1.Text = Text1.Text & vbCrLf
Next i2
Text1.Text = Text1.Text & vbCrLf
Next i1
Text1.Text = Text1.Text & "以上组合共有:" & Cou
End Sub
其中maxn我设为12,如设成16会算很久,我机器慢,呵呵.
根据你写的这段程序,
假设i1=1,i2=2,i3=3,i4=4时,条件满足,打印出来的结果是1,2,3,4
假设i1=4,i2=3,i3=2,i4=1时,条件也满足,打印出来的结果是4,3,2,1
难道你是想要4个数的排列?
我不明白
看来我还是没有理解你问的问题引用---------------
回复人: Anthorny(浪子) ( ) 信誉:100
你那是排列来的,我会啊
for i1=1 to 16
for i2=1 to 16
for i3=1 to 16
for i4=1 to 16
if(i1<>i2)and(i1<>i3)(i1<>i4)and(i2<>i3)and(i2<>i4)and(i3<>i4) then
print i1;i2; i3; i4
end if
next i4
next i3
next i2
next i1
这代码比你的好吧
我要的是组合啊。
看清楚我的问题先
正确的情况应该是把
for i=1 to 13
for j=2 to 14
for k=3 to 15
foi l=4 to 16
改成
for i=1 to 13
for j=i+1 to 14
for k=j+1 to 15
foi l=k+1 to 16