Board logo

标题: [数值计算] 批处理如何遍历生成8位数全部数值?每位可选数字不同 [打印本页]

作者: vcaqua    时间: 2013-8-8 23:45     标题: 批处理如何遍历生成8位数全部数值?每位可选数字不同

如21113210,第1位和第6位有0,1,2三个数可选,第5位可选3,4,其他位可以选0,1。只找到多位二进制数的遍历方法,帖子在这里,谢谢各位。
http://www.bathome.net/archiver/tid-13140.html
作者: CrLf    时间: 2013-8-9 00:33

本帖最后由 CrLf 于 2013-8-9 17:33 编辑

对于排列组合,可以这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a all=3*2*2*2*2*3*2*2
  3. (for /l %%a in (1 1 !all!) do (
  4.    set /a "n=%%a,v=100000000 + n/192%%3*10000000 + n/96%%2*1000000 + n/48%%2*100000 + n/24%%2*10000 + (n/12%%2+3)*1000 + n/4%%3*100 + n/2%%2*10 + n%%2"
  5.    echo !v:~1!
  6. ))>list.txt
  7. pause
复制代码

作者: weichenxiehou    时间: 2013-8-9 05:49

本帖最后由 weichenxiehou 于 2013-8-9 12:50 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /l %%a in (100000000 1 121114211) do set n=%%a&echo,!n:~1!)|findstr "^[012][01][01][01][34][012][01][01]$"
复制代码

作者: 523066680    时间: 2013-8-9 09:06

本帖最后由 523066680 于 2013-8-9 09:30 编辑

既然大家都这么精简,那我就写长一点了。
楼主,是全排列不?
理论上应该有 (2^5)*3*3*2 = 576 个结果
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set S5=3 4
  4. set S1=0 1 2
  5. set S6=0 1 2
  6. for /l %%x in (1,1,8) do (
  7.     if defined S%%x (
  8.         set "f%%x=for %%%%x in (!S%%x!) do ("
  9.     ) else (
  10.         set "f%%x=for %%%%x in (0 1) do ("
  11.     )
  12. )
  13. set count=0
  14. %f1%%f2%%f3%%f4%%f5%%f6%%f7%%f8%
  15.     set /a count+=1
  16.     echo %%1%%2%%3%%4%%5%%6%%7%%8
  17. ))))))))
  18. echo 共有%count%个结果
  19. pause
复制代码

作者: terse    时间: 2013-8-9 11:57

回复 2# CrLf
楼主的意思是这样吧
  1.    set /a "n=%%a,v=100000000 + n/96%%3*10000000 + n/96%%2*1000000 + n/48%%2*100000 + n/24%%2*10000 + (n/12%%2+3)*1000 + n/4%%3*100 + n/2%%2*10 + n%%2"
复制代码

作者: vcaqua    时间: 2013-8-9 13:40

感谢各位,非常精彩,命令行输出都很好,是576个全排列结果没错。
再问一句如果加入>List.txt应该怎么做?
作者: CrLf    时间: 2013-8-9 13:48

回复 5# terse


    错了一位,已修改,感谢指正!
作者: 523066680    时间: 2013-8-9 14:44

本帖最后由 523066680 于 2013-8-9 15:05 编辑

回复 7# CrLf

1.228个结果 2.有重复项

没修改到吧,拿terse的贴上去就OK了
作者: terse    时间: 2013-8-9 15:01

再加一个循环
  1. set /a all=3*2*2*2*2*3*2*2
复制代码

作者: 523066680    时间: 2013-8-9 15:02

回复 6# vcaqua

以下是一个可选方式:

    开头先type nul>list.txt
    找到有echo 的句子加 >>list.txt
作者: vcaqua    时间: 2013-8-9 15:18

谢谢大家




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2