中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 03:30
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]对变量进行组合显示的问题
可打印版本  1,043 / 7
第1楼 Hanyeguxing 发表于 2009-07-04 13:34
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
[已结]对变量进行组合显示的问题
说明:要求讨论组合的可能情况,而不是排列的情况!

例如 set hanye=寒 夜 孤 星,那么变量中这四个字,每个字与其他字组合,不限制组合的字数(即可以单字)有多少种组合呢?

要求输出如下效果:





寒夜
寒孤
寒星
夜孤
夜星
孤星
寒夜孤
寒夜星
寒孤星
夜孤星
寒夜孤星

15种组合方法
请按任意键继续...


如何输出或显示出符合条件的情况呢?

[ Last edited by Hanyeguxing on 2009-7-5 at 09:07 ]
第2楼 moniuming 发表于 2009-07-04 14:01
银牌会员 发帖 574 积分 1,335 来自 广西
第3楼 Hanyeguxing 发表于 2009-07-04 17:59
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
折腾一晚上,竟然给我输出:
****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=495, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******

睡觉去了。。。
第4楼 netbenton 发表于 2009-07-05 03:24
银牌会员 发帖 752 积分 1,916 来自 广西
是不是要做成这样呢?
根据 2楼 链接,学习后,再变通得来的。


[ Last edited by netbenton on 2009-7-5 at 01:27 ]
第5楼 Hanyeguxing 发表于 2009-07-05 03:50
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
感谢楼上的朋友。
2楼给出的链接做出的是 排列 的情况,而我需要的是 组合 的情况。
对于组合来说,“寒夜孤星”与“寒夜星孤”是一样的情况,虽然对于排列来说,他们是不同的。所以,排列后,需要再过滤。。。即过滤掉所有使用相同汉字(相同元素)的情况。

顺便庆祝一下,自己终于可以给别人加4分了,哈哈
第6楼 Hanyeguxing 发表于 2009-07-05 04:08
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
一般的想法,列出所有排列的可能,再过滤得到组合的情况。

按照我在1楼给出的要求,则可能的排列组合数:(n为变量中的字数

对于组合:Σ(n)=2(n-1)+2(1)+2(2)+2(3)+......+2(n) 说明:本式中,()内的数值为 2 的指数。
   即:Σ(n)=2(n)-1 说明:本式中,()内的数值为 2 的指数。

对于排列:Σ(n)=n+
        n*(n-1)+
        n*(n-1)*(n-2)+
        n*(n-1)*(n-2)*(n-3)+
        n*(n-1)*(n-2)*(n-3)*(n-4)+
        n*(n-1)*(n-2)*(n-3)*(n-4)*(n-5)+
        ......
        n*(n-1)*(n-2)*(n-3)*(n-4)*(n-5)*......*3+
        n*(n-1)*(n-2)*(n-3)*(n-4)*(n-5)*......*3*2+
        n*(n-1)*(n-2)*(n-3)*(n-4)*(n-5)*......*3*2*1


当只有四个汉字时,即 n=4 ,则排列数是 64 ,组合数是 15 ,随着 n 的增大,组合数成代数增长,而排列数则在成几何增长。

例如当 n=10 时,组合数是 1023 ,排列数为 9183700 ,这是一个近千万的天文数字。再从 9183700 种排列情况中过滤得到符合条件 1023 种组合的情况,是件很恐怖的事情。。。

于是,我有了这样一个想法,能不能不使用“先排列再过滤”的方法呢?

[ Last edited by Hanyeguxing on 2009-7-5 at 08:15 ]
第7楼 netbenton 发表于 2009-07-05 08:42
银牌会员 发帖 752 积分 1,916 来自 广西
原来两年前已经有前辈把这个问题完美解决了!
http://www.cn-dos.net/forum/viewthread.php?tid=26180###
第8楼 Hanyeguxing 发表于 2009-07-05 09:05
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
惭愧。。。
自己琢磨两天了,也没弄好。。。
看了15楼的代码,汗颜啊,这就是差距,也是努力的方向。。。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023