[已解决]求一个组合算法,比如26个字母中,取3个字母排列,有多少种排列。
本帖最后由 onepc 于 2011-5-19 18:02 编辑求一个组合算法,比如26个字母中,取3个字母排列,有多少种排列。
比如aaf ,abc ,kij,adf,kii ,jjk ,,,求个算法。 #include <Array.au3>
$Time=TimerInit()
Dim $aArray
for $i=0 to 25
$aArray[$i]=Chr($i+65)
Next
$aArrayCombo = _ArrayCombinations($aArray, 3, ",")
_arraydisplay($aArrayCombo,TimerDiff($Time))
好像不能重复的,若是要有重复的呢,比如xxx,xxk
null
26的三次方不就得了 回复 3# onepc2#不重合加上重合的部分26*26这么多种吧。。。 本帖最后由 love5173 于 2011-5-19 15:22 编辑
这个是高中数学的必修内容好吧,无语中
算法是程序的灵魂,如果知道公式计算时间能大大减少
4楼正解,也可以26*26*26 只需要返回数量?还是需要枚举出来?
local $array
$k=0
for $i=0 to 25
for $n=0 to 25
for $y=0 to 25
$array[$k]=Chr($i+65)&","&Chr($n+65)&","&Chr($y+65)
$k+=1
Next
Next
Next
_arraydisplay($array) 回复 7# 3mile
各位。 是组合,不是排列。
组合公式是 C(N,R)=N!/(R!*(N-R)!)
由此得出。 26个字母取3个组合的结果为。
26!/(3!*(26-3)!)
展开为:(将下列横线当成是分数线)
26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1
---------------------------------------------------------------------------------------------------------
3*2*1*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1
消减约去相同部分最后结果为。
26*25*24/(3*2*1)
结果为
2600 回复 8# lanfengc
你看过3M 第一个代码吗?
第一个就是2600的组合
是楼主要的也要重复的
3M才给的下文 谢谢了。OK~~~ 回复 9# love5173
{:face (394):}没注意,惭愧。
页:
[1]