中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]对变量进行组合显示的问题
作者:
标题: [已结]对变量进行组合显示的问题 上一主题 | 下一主题
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『楼 主』:  [已结]对变量进行组合显示的问题

说明:要求讨论组合的可能情况,而不是排列的情况!

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

要求输出如下效果:





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

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


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

[ Last edited by Hanyeguxing on 2009-7-5 at 09:07 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-7-4 13:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 2 楼』:  

看看这里如何?
http://www.cn-dos.net/forum/view ... ghlight=&page=1

2009-7-4 14:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 3 楼』:  

折腾一晚上,竟然给我输出:
******  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      ******

睡觉去了。。。



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-7-4 17:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 4 楼』:  

是不是要做成这样呢?
根据 2楼 链接,学习后,再变通得来的。
@echo off&setlocal enabledelayedexpansion
set in=寒夜孤星
set /p in=输入字符串
set m=0
set svr=abcdefghijklmnopqrstuvwxyz
:rep
if "!in:~%m%,1!" neq "" (set s0=!s0! !in:~%m%,1! &set/a m+=1&goto :rep)
set n=0
for %%a in (!s0!) do (
        for %%b in (!n!) do (
                set /a n+=1
                set "coe1=!coe1!for %%!svr:~%%b,1! in (^!s%%b^!) do (set s!n!=^!s%%b:%%!svr:~%%b,1!=^!^&"
                set "coe2=!coe2!%%!svr:~%%b,1!"
                set "coe3=!coe3!)"
                set doe1%%b=!coe1:~,-16!
                set doe2%%b=!coe2!
                set doe3%%b=!coe3!
        )
)
set n=0
:loop
set coe1=!doe1%n%!
set coe2=!doe2%n%!
set coe3=!doe3%n%!

::动态代码
%coe1%
echo %coe2%
%coe3%
::动态代码

set/a n+=1
pause
if !n! neq !m! goto loop
[ Last edited by netbenton on 2009-7-5 at 01:27 ]

   此帖被 +4 点积分        点击查看详情   
评分人:【 Hanyeguxing 分数: +4  时间:2009-7-5 03:39




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-7-5 03:24
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 5 楼』:  

感谢楼上的朋友。
2楼给出的链接做出的是 排列 的情况,而我需要的是 组合 的情况。
对于组合来说,“寒夜孤星”与“寒夜星孤”是一样的情况,虽然对于排列来说,他们是不同的。所以,排列后,需要再过滤。。。即过滤掉所有使用相同汉字(相同元素)的情况。

顺便庆祝一下,自己终于可以给别人加4分了,哈哈



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-7-5 03:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 6 楼』:  

一般的想法,列出所有排列的可能,再过滤得到组合的情况。

按照我在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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-7-5 04:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 7 楼』:  

原来两年前已经有前辈把这个问题完美解决了!
http://www.cn-dos.net/forum/viewthread.php?tid=26180###

   此帖被 +4 点积分        点击查看详情   
评分人:【 Hanyeguxing 分数: +4  时间:2009-7-5 09:03




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-7-5 08:42
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 8 楼』:  

惭愧。。。
自己琢磨两天了,也没弄好。。。
看了15楼的代码,汗颜啊,这就是差距,也是努力的方向。。。



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-7-5 09:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: