![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-04 20:50 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]排列组合 |
| 可打印版本 6,468 / 36 |
| 第1楼 pusofalse | 发表于 2008-06-29 05:35 |
| 银牌会员 发帖 646 积分 1,604 | |
|
[已结]排列组合 随便给出一组字串 比如 a b c
罗列出a b c 所有的排列组合 即是输出 如下 a b c a c b b a c b c a c a b c b a 我用笨方法,三重for循环能得到如此的结果,但字符数量不一定。。。 如此。。。求教高人。。。希望能总结出一个高效实用的方法。。。 [ Last edited by pusofalse on 2008-12-28 at 03:32 ] |
|
| 第2楼 pusofalse | 发表于 2008-06-29 10:22 |
| 银牌会员 发帖 646 积分 1,604 | |
|
这是我的代码 忙活了一个早晨,结果却发现重大的BUG 就是只能三个字符时 才能排列出所有组合 多了或少了都会出错 只能3个 请教各位高人,有没有好的方法~
[ Last edited by pusofalse on 2008-6-29 at 10:29 AM ] |
|
| 第3楼 bat-zw | 发表于 2008-06-29 11:04 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
不知道这样合要求不:
|
|
| 第4楼 pusofalse | 发表于 2008-06-29 11:07 |
| 银牌会员 发帖 646 积分 1,604 | |
|
ZW前辈给出的代码也是有BUG的。。。 只能排列四个字符的组合 如果多出几个 只保留前面四个。。。 如果少了,会出现以零为除数的错误。。。
随机给出的字串,字串数量未知。。。 |
|
| 第5楼 bat-zw | 发表于 2008-06-29 11:29 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by pusofalse at 2008-6-29 11:07: 字符数不定确实是个大麻烦,下面的代码基本可以实现了(自己觉得好繁杂): [ Last edited by zw19750516 on 2008-6-29 at 12:04 PM ] |
|
| 第6楼 pusofalse | 发表于 2008-06-29 11:35 |
| 银牌会员 发帖 646 积分 1,604 | |
|
真是太感谢了! 学习中~
|
|
| 第7楼 bat-zw | 发表于 2008-06-29 11:37 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by pusofalse at 2008-6-29 11:35: 这样的方法当字符数到6位以上将会慢得吓人!,还是要需求别的方法了。 |
|
| 第8楼 pusofalse | 发表于 2008-06-29 11:46 |
| 银牌会员 发帖 646 积分 1,604 | |
|
嗯 试过了,6位以下还好。。。另外,还有一个bug 输入类似b e e n 这样的其中有两个相同字符的字串时会出错
|
|
| 第9楼 HAT | 发表于 2008-06-29 11:52 |
| 版主 发帖 5,017 积分 9,023 | |
|
以前学习《算法设计》的时候写过这样的C代码,是一个递归算法。
|
|
| 第10楼 bat-zw | 发表于 2008-06-29 11:52 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
相同的字符好处理的:
在批处理中加入for %%i in (%codes%) do set a=#%%i#&set b=!b! !a!,再做相应处理,具体的代码我就不写了,只是高位的效率问题好像用批处理是解决不了的,因为用我二楼的方法set var=%var% %str%是会受到字符总数限制的。 [ Last edited by zw19750516 on 2008-6-29 at 12:02 PM ] |
|
| 第11楼 plp626 | 发表于 2008-06-29 13:37 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
6位的代码类似 |
|
| 第12楼 bat-zw | 发表于 2008-06-29 13:47 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
终于提高了一点点效率,本机测试排列六位数将近10分钟:
|
|
| 第13楼 plp626 | 发表于 2008-06-29 14:07 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
7位用时2.28秒
timediff.bat 可在论坛p函数库里找到(用于计算两个时间点的差值) |
|
| 第14楼 bat-zw | 发表于 2008-06-29 16:33 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by plp626 at 2008-6-29 14:07: |
|
| 第15楼 slore | 发表于 2008-06-29 17:19 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
根据n生成一个n重套嵌的bat然后调用=。=
bat貌似用参数可以实现“递归”。。。不过没有实践这个。。。脑细胞。。。 |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |