中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] »
作者:
标题: [已结]排列组合 上一主题 | 下一主题
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 31 楼』:  

感谢这么多高手,非常完美!

2008-12-21 04:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 32 楼』:  

不过现在又有新问题,如输入字符有重复,如:13543 。用楼上的代码可以完美的得到所有打乱顺序的组合。但如果这5个字符中如有重复的字符,那输出的结果中也就会有完全一样的多个字符串。
如例中 13543 会生成如下结果,每个组合都出现了两次, 有什么办法可让它生成的时候不重复多余的一样的字符串?
----------------------------------list.x----------------------------------------------
13543
13534
13453
13435
13354
13345
15343
............
13345
33541
33415
33451
35134
35143
35314
35341
35413
35431
34135
34153
34315
34351
34513
34531
-----------------------------------------------end------------------------------------------

[ Last edited by clian76 on 2008-12-21 at 04:37 ]

2008-12-21 04:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 33 楼』:  Re 32楼

先删除输入字符串中的重复字符,再排列组合行不?



2008-12-21 11:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 34 楼』:  

无临时文件
@echo off&setlocal enabledelayedexpansion
set/p str=请输入字符:
:lp
if defined str (
   set num=!str:~,1!
   if not defined ..!num! (
      set /a n+=1
      set ..!num!=b
      set "_!n!=!str:~,1!"&set "str=!str:~1!"
      goto lp
      ) else (
      set "str=!str:~1!"
      goto lp
    ))
    call:next
    echo %mn% 个组合
    pause&exit
:next
set/a m+=1
   if %m% leq %n% for /l %%i in (1 1 %n%) do (
      for %%j in (%~1) do set .%%j=%%j
        if not defined .%%i call :next "%~1 %%i"
          for /l %%k in (1 1 %n%) do set .%%k=
        ) else (
          for /l %%l in (1 1 %n%) do set .%%l=
          for %%m in (%~1) do set/p=!_%%m!<nul
          echo.
          set/a mn+=1
         )
          set/a m-=1
在batman兄的代码上简化下  有临时文件
@echo off&setlocal enabledelayedexpansion
set/p str=请输入字符:
:lp
   set num=!str:~,1!
   if not defined .!num! (
      set str1=!str1!!num!
      set /a n+=1
      set .!num!=b
      set "_!n!=!str:~,1!"&set "str=!str:~1!"
      if defined str goto lp
      )else (
      set "str=!str:~1!"
      if defined str goto lp
    )
set/a n-=1
>b.bat echo @echo off^&setlocal enabledelayedexpansion
>>b.bat echo set "str=%str1%"
>>b.bat echo for /l %%%%i in (0 1 %n%) do set _%%%%i=^^!str:~%%%%i,1^^!^&set var0=^^!var0^^! %%%%i
for /l %%i in (0 1 %n%) do (
set/a m+=1
if !m! gtr %n% (
>>b.bat echo for %%%%%%i in (^^!var%%i^^!^) do echo !var!^^!_%%%%%%i^^!)else (
>>b.bat echo for %%%%%%i in (^^!var%%i^^!^) do ^(set "var!m!=^!var%%i:%%%%%%i=^!"
        set "var=!var!^!_%%%%%%i^!"
        set "k=!k!^)"
        ))
>>b.bat echo set/a t+=1
>>b.bat echo %k%
>>b.bat echo echo %%t%% 个组合
call "b.bat"
del "b.bat"
pause>nul
[ Last edited by terse on 2008-12-24 at 03:12 ]



简单!简单!再简单!
2008-12-21 17:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 35 楼』:  

测试了一下楼上的代码,还是没达到想要的要求。楼上的代码只是告诉共有多少种组合。但并没有排除已存在的重复组合。
我的办法是在生成了一个文件后用FINDSTR再自我查找一次,过滤掉重复的字符串,
只是麻烦点。希望高手整个简便的就好了。
最后再次谢谢高手们!都太厉害了!

2008-12-23 13:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 36 楼』:  



  Quote:
Originally posted by clian76 at 2008-12-23 13:49:
测试了一下楼上的代码,还是没达到想要的要求。楼上的代码只是告诉共有多少种组合。但并没有排除已存在的重复组合。
我的办法是在生成了一个 ...

重新修正一下
删除输入字符串中的重复字符后 再组合 不知符合要求否?



简单!简单!再简单!
2008-12-24 03:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 37 楼』:  

修改过
@echo off&setlocal enabledelayedexpansion
call :func "0" "" "abcdef"
pause &exit
:func
set str=%~3
if "%str:~1%"=="" (set /a na=%~1+1
                   echo,%~2%str%
                   goto :eof)
set na=0
:loop
set /a nb=na+1
call :func "%na%" "%~2!str:~%na%,1!" "!str:~0,%na%!!str:~%nb%!"
set str=%~3
if not "!str:~%na%!"=="" goto :loop
set /a na=%~1+1




综合型编程论坛

我的作品索引
  
2009-12-13 10:23
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: