对给定个数字符进行可重复组合
例:set zf=abcdefghijklmnopqrstuvwxyz
如果输入5(不固定) 则从zf 中取5个进行组合:
有:aaaaa;aaaab,aaaac,……zzzzz。
但如aaaac,acaaa,aacaa,caaaa……
abcde,cdabc,dacbe……
均属重复只要任意一个即可。
说明:1.遍历比较实现应该很简单,但效率太低。希望有高效的方法。
2.这题如一般排列组合有差别
3.如果字符不好处理,set zf=0123456789亦可(这个是原题要求,也是我要的),这里要求字符是为了通用性。
--------------------------------------------
感谢powerbat 提供的思路- @echo off
- setlocal enableDelayedExpansion
- set arr=0123456789
- ::len为arr的长度
- set len=10
- set /p num=需要组合的字数:
- set /a num-=1,len-=1
- for /l %%a in (0 1 %num%) do (
- if 0==%%a (set start=0) else (set /a start=%%a-1&set start=%%!start!)
- set "do=!do! for /l %%%%a in (!start!,1,%len%) do"
- set "exp=!exp!^!arr:~%%%%a,1^!"
- )
- %do% echo %exp%
- pause
- endlocal
复制代码
|