hlzxcjx 发表于 2009-4-10 07:29:10

求数字1~9从1位至9位的组合算法

求数字1~9从1位至9位的组合算法,要求输出:
1位:123456789
2位: 11   12   … 19 
   21 22  … 29
   …  …  … …
   91 …  … 99
… 
9位:111111111   11111112   …   111111119 11111121   111111122   111111129         …
         …            …            …             …      …         …         …
   …            …            …             …          …            …          999999999

即数字1~9从1位至9位的所有排列组合!求解!

顽固不化 发表于 2009-4-10 10:13:07

有意义吗?要算出来是没问题的

大绯狼 发表于 2009-4-10 10:32:50

$len = 9
$num = ""
For $i = 1 To $len
        $num &= 9
Next
For $i = 1 To $num
        If Not StringInStr($i, "0") Then
                If Int(StringReplace($i, "1", "0")) = 0 Then FileWrite($file, "第" & StringLen($i) & "位" & @TAB)
                FileWrite($file, $i & @TAB)
                If Int(StringReplace($i, "9", "0")) = 0 Then FileWrite($file, @CRLF)
        EndIf
Next
用字符串写了个简单的。。。。。。

pcbar 发表于 2009-4-10 10:46:18

原帖由 顽固不化 于 2009-4-10 10:13 发表 http://www.autoitx.com/images/common/back.gif
有意义吗?要算出来是没问题的
我也觉得没意义,很简单的算术
list(1)
list(2)
list(3)
........
Func list($x)
for $j=10^($x-1)to 10^$x
        $m=StringFormat("%0"&$x&"d",$j)
        if not StringInStr($m,"0") Then
                ConsoleWrite($m&@CRLF)
        endif
Next
EndFunc   ;==>list

au3的效率很低的,不信试试list(9)

大绯狼 发表于 2009-4-10 10:49:20

原帖由 pcbar 于 2009-4-10 10:46 发表 http://autoitx.com/images/common/back.gif

我也觉得没意义,很简单的算术
list(1)
list(2)
list(3)
........
Func list($x)
for $j=10^($x-1)to 10^$x
        $m=StringFormat("%0"&$x&"d",$j)
        if not StringInStr($m,"0") Then
                ConsoleWrite($m&@C ...
还是老大们厉害。。

seominho 发表于 2009-4-10 11:09:21

dim $a=
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b,$n,$a)
;b 为n-1位数组,n为数的位数,a为初始数组
$c
if $n=1 then
$c=$b
/显示数组c到c]
endif
$m=0
if $n>=2 then
for $i=1 to b
for $j=1 to a
$m+=1
$c=b[$i]*10+
next
next
$c=m
/显示c到c]
return $c
endfunc

hlzxcjx 发表于 2009-4-10 13:52:38

果然高手不少!假如再提高难度:

0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

从1位至z(36位)的所有排列组合!又如何呢?

seominho 发表于 2009-4-10 14:03:24

dim $a=[36,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
]
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b,$n,$a)
;b 为n-1位数组,n为数的位数,a为初始数组
$c
if $n=1 then
$c=$b
/显示数组c到c]
endif
$m=0
if $n>=2 then
for $i=1 to b
for $j=1 to a
$m+=1
$c=b[$i]&a
next
next
$c=m
/显示c到c]
return $c
endfunc

hlzxcjx 发表于 2009-4-10 14:21:39

原帖由 seominho 于 2009-4-10 14:03 发表 http://www.autoitx.com/images/common/back.gif
dim $a=[36,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
]
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b, ...

调试出错!如图:

a,b,…要不要用Chr()转换?

seominho 发表于 2009-4-10 14:34:05

上面的a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
应该都用 双引号括起来   如 "a","b","c"......

hlzxcjx 发表于 2009-4-10 19:52:11

原帖由 seominho 于 2009-4-10 14:34 发表 http://www.autoitx.com/images/common/back.gif
上面的a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
应该都用 双引号括起来   如 "a","b","c"......

也不对!代码有误!

hlzxcjx 发表于 2009-4-12 20:15:40

原帖由 seominho 于 2009-4-10 11:09 发表 http://www.autoitx.com/images/common/back.gif
dim $a=
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b,$n,$a)
;b 为n-1位数组,n为数的位数,a为初始数组
$c
if...

代码有误!

seominho 发表于 2009-4-13 09:20:52

dim $a=
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b,$n,$a)
;b 为n-1位数组,n为数的位数,a为初始数组
dim $c=
if $n=1 then
$c=$b
/显示数组c到c]
endif
$m=0
if $n>=2 then
redim $c[$b*$a+1]
for $i=1 to $b
for $j=1 to $a
$m+=1
$c=$b[$i]*10+$a[$j]
next
next
$c=$m
/显示c到c]
return $c
endfunc
这样就没问题了。。。。

seominho 发表于 2009-4-13 09:23:31

dim $a=[36,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
]
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b,$n,$a)
;b 为n-1位数组,n为数的位数,a为初始数组
dim $c=
if $n=1 then
$c=$b
/显示数组c到c]
endif
$m=0
if $n>=2 then
redim $c[$b*a+1]
for $i=1 to $b
for $j=1 to $a
$m+=1
$c=$b[$i]&$a
next
next
$c=$m
/显示c到c]
return $c
endfunc

hlzxcjx 发表于 2009-4-13 19:17:49

原帖由 seominho 于 2009-4-13 09:20 发表 http://www.autoitx.com/images/common/back.gif
dim $a=
dim $f=$a
for $i=1 to n;n 可以自己设 n 为要得到的最大位数如9
$f=compages($f,$i,$a)
next
func compages($b,$n,$a)
;b 为n-1位数组,n为数的位数,a为初始数组
dim $c[ ...

你还是调试好再发代码吧!菜鸟看不懂也不会帮你修改!
页: [1] 2
查看完整版本: 求数字1~9从1位至9位的组合算法