找回密码
 加入
搜索
查看: 5269|回复: 17

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

[复制链接]
发表于 2009-4-10 07:29:10 | 显示全部楼层 |阅读模式
求数字1~9从1位至9位的组合算法,要求输出:
1位:1  2  3  4  5  6  7  8  9
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 | 显示全部楼层
[au3]$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[/au3]
用字符串写了个简单的。。。。。。
发表于 2009-4-10 10:46:18 | 显示全部楼层
原帖由 顽固不化 于 2009-4-10 10:13 发表
有意义吗?要算出来是没问题的

我也觉得没意义,很简单的算术
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 发表

我也觉得没意义,很简单的算术
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 ...

还是老大们厉害。。
发表于 2009-4-10 11:09:21 | 显示全部楼层
dim $a[10]=[9,1,2,3,4,5,6,7,8,9]
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[1]到c[c[0]]
endif
$m=0
if $n>=2 then
for $i=1 to b[0]
for $j=1 to a[0]
$m+=1
$c[m]=b[$i]*10+[j]
next
next
$c[0]=m
/显示c[1]到c[c[0]]
return $c
endfunc
 楼主| 发表于 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位)的所有排列组合!又如何呢?
发表于 2009-4-10 14:03:24 | 显示全部楼层
dim $a[37]=[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[1]到c[c[0]]
endif
$m=0
if $n>=2 then
for $i=1 to b[0]
for $j=1 to a[0]
$m+=1
$c[m]=b[$i]&a[j]
next
next
$c[0]=m
/显示c[1]到c[c[0]]
return $c
endfunc
 楼主| 发表于 2009-4-10 14:21:39 | 显示全部楼层
原帖由 seominho 于 2009-4-10 14:03 发表
dim $a[37]=[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()转换?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 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"......
 楼主| 发表于 2009-4-10 19:52:11 | 显示全部楼层
原帖由 seominho 于 2009-4-10 14:34 发表
上面的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"......


也不对!代码有误!
 楼主| 发表于 2009-4-12 20:15:40 | 显示全部楼层
原帖由 seominho 于 2009-4-10 11:09 发表
dim $a[10]=[9,1,2,3,4,5,6,7,8,9]
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  ...


代码有误!
发表于 2009-4-13 09:20:52 | 显示全部楼层
dim $a[10]=[9,1,2,3,4,5,6,7,8,9]
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]=[0]
if $n=1 then
$c=$b
/显示数组c[1]到c[c[0]]
endif
$m=0
if $n>=2 then
redim $c[$b[0]*$a[0]+1]
for $i=1 to $b[0]
for $j=1 to $a[0]
$m+=1
$c[m]=$b[$i]*10+$a[$j]
next
next
$c[0]=$m
/显示c[1]到c[c[0]]
return $c
endfunc
这样就没问题了。。。。
发表于 2009-4-13 09:23:31 | 显示全部楼层
dim $a[37]=[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[1]=[0]
if $n=1 then
$c=$b
/显示数组c[1]到c[c[0]]
endif
$m=0
if $n>=2 then
redim $c[$b[0]*a[0]+1]
for $i=1 to $b[0]
for $j=1 to $a[0]
$m+=1
$c[m]=$b[$i]&$a[j]
next
next
$c[0]=$m
/显示c[1]到c[c[0]]
return $c
endfunc
 楼主| 发表于 2009-4-13 19:17:49 | 显示全部楼层
原帖由 seominho 于 2009-4-13 09:20 发表
dim $a[10]=[9,1,2,3,4,5,6,7,8,9]
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[ ...


你还是调试好再发代码吧!菜鸟看不懂也不会帮你修改!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 08:39 , Processed in 0.090430 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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