找回密码
 加入
搜索
查看: 9759|回复: 10

[效率算法] [已解决]求一个组合算法,比如26个字母中,取3个字母排列,有多少种排列。

 火.. [复制链接]
发表于 2011-5-19 13:06:06 | 显示全部楼层 |阅读模式
本帖最后由 onepc 于 2011-5-19 18:02 编辑

求一个组合算法,比如26个字母中,取3个字母排列,有多少种排列。

比如aaf ,abc ,kij,adf,kii ,jjk ,,,求个算法。
发表于 2011-5-19 13:18:23 | 显示全部楼层
#include <Array.au3>
$Time=TimerInit()
Dim $aArray[26] 
for $i=0 to 25
        $aArray[$i]=Chr($i+65)
Next
$aArrayCombo = _ArrayCombinations($aArray, 3, ",")
_arraydisplay($aArrayCombo,TimerDiff($Time))
 楼主| 发表于 2011-5-19 13:34:21 | 显示全部楼层
好像不能重复的,若是要有重复的呢,比如xxx,xxk
发表于 2011-5-19 13:49:36 | 显示全部楼层

null

26的三次方不就得了
发表于 2011-5-19 15:06:12 | 显示全部楼层
回复 3# onepc

2#不重合加上重合的部分26*26这么多种吧。。。
发表于 2011-5-19 15:18:55 | 显示全部楼层
本帖最后由 love5173 于 2011-5-19 15:22 编辑

这个是高中数学的必修内容好吧,无语中
算法是程序的灵魂,如果知道公式计算时间能大大减少
4楼正解,也可以26*26*26
发表于 2011-5-19 15:41:26 | 显示全部楼层
只需要返回数量?还是需要枚举出来?
local $array[26^3]
$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)
发表于 2011-5-19 17:37:23 | 显示全部楼层
回复 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
发表于 2011-5-19 17:41:43 | 显示全部楼层
回复 8# lanfengc
你看过3M 第一个代码吗?
第一个就是2600的组合
是楼主要的也要重复的
3M才给的下文
 楼主| 发表于 2011-5-19 18:02:31 | 显示全部楼层
谢谢了。OK~~~
发表于 2011-5-19 19:07:42 | 显示全部楼层
回复 9# love5173


      没注意,惭愧。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-21 01:13 , Processed in 0.074681 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表