[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. set /a "x=%random%%%10000"
  3. if %x% lss 1000 ( set /a "x+=1000" )
  4. echo %x%
复制代码

TOP

内容………

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=0123456789
  4. for /l %%i in (1 1 20) do (
  5. for /l %%i in (1 1 11) do (
  6.   set /a a=!random! %% 9
  7.   call set str=!a!%%str:!a!=%%
  8. )
  9. set str0=!str:~-4,1!
  10. if !str0!==0 (echo !str:~-5,4!) else echo !str:~-4,4!
  11. )
  12. pause
复制代码
用楼主的 代码 扩展一下哈哈

TOP

  1. @echo off
  2. call :n r1
  3. call :n r2
  4. call :n r3
  5. call :n r4
  6. if not %r1%==%r2% if not %r2%==%r3% if not %r3%==%r4% goto fin
  7. %0
  8. :n
  9. set /a %1=%random%%%9+1
  10. goto :eof
  11. :fin
  12. echo %r1%%r2%%r3%%r4%
  13. pause>nul
  14. %0
复制代码

虽然麻烦了点……但是电脑运行的速度足够在一秒之内算出来了吧。

[ 本帖最后由 jixun66 于 2010-10-26 01:03 编辑 ]

TOP

好理解一点的

  1. @echo off
  2. :a1
  3. set n=0
  4. :a
  5. set /a var=%random% %% 9000 +1000
  6. set v1=%var:~,1%
  7. set v2=%var:~1,1%
  8. set v3=%var:~2,1%
  9. set v4=%var:~3,1%
  10. if %v1%==%v2% goto a
  11. if %v1%==%v3% goto a
  12. if %v1%==%v4% goto a
  13. if %v2%==%v3% goto a
  14. if %v2%==%v4% goto a
  15. if %v3%==%v4% goto a
  16. set /a n+=1
  17. set var%n%=%var%
  18. if %n% lss 4 goto a
  19. if %var1%==%var2% pause&goto a1
  20. if %var1%==%var3% pause&goto a1
  21. if %var1%==%var4% pause&goto a1
  22. if %var2%==%var3% pause&goto a1
  23. if %var2%==%var4% pause&goto a1
  24. if %var3%==%var4% pause&goto a1
  25. echo %var1%
  26. echo %var2%
  27. echo %var3%
  28. echo %var4%
  29. pause
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. :a1
  3. set n=0
  4. :a
  5. set /a var=%random% %% 9000 +1000
  6. set v1=%var:~,1%
  7. set v2=%var:~1,1%
  8. set v3=%var:~2,1%
  9. set v4=%var:~3,1%
  10. if %v1% neq %v2% (
  11.    if %v1% neq %v3% (
  12.       if %v1% neq %v4% (
  13.          if %v2% neq %v3% (
  14.             if %v2% neq %v4% (
  15.                if %v3% neq %v4% (
  16.                   goto b
  17.                ) else (
  18.                  goto a
  19. ))))))
  20. :b
  21. set /a n+=1
  22. set var%n%=%var%
  23. if %n% lss 4 goto a
  24. if %var1% neq %var2% (
  25.    if %var1% neq %var3% (
  26.       if %var1% neq %var4% (
  27.          if %var2% neq %var3% (
  28.             if %var2% neq %var4% (
  29.                if %var3% neq %var4% (
  30.                   goto c
  31.                  ) else (
  32.                  goto a1
  33. ))))))
  34. :c
  35. echo %var1%
  36. echo %var2%
  37. echo %var3%
  38. echo %var4%
  39. pause
复制代码

TOP

@echo off
setlocal enabledelayedexpansion
:start
set n=1
:loop
set/a a1=!random!%%9
set/a a2=!random!%%9
set/a a3=!random!%%9
set/a a4=!random!%%9
if !a1!==!a2! (goto loop)
if !a2!==!a3! (goto loop)
if !a3!==!a4! (goto loop)
if !a1!==!a4! (goto loop)
if !a1!==!a3! (goto loop)
if !a2!==!a4! (goto loop)
if !a1!==0 (goto loop)
set res!n!=!a1!!a2!!a3!!a4!
set/a n+=1
if !n!==5 (goto ss)
goto loop
:ss
if !res1!==!res2! (goto start)
if !res2!==!res3! (goto start)
if !res3!==!res4! (goto start)
if !res1!==!res4! (goto start)
if !res1!==!res3! (goto start)
if !res2!==!res4! (goto start)
echo !res1!
echo !res2!
echo !res3!
echo !res4!
pause

TOP

投机取巧,但并非每次都得
  1. @echo off&setlocal enabledelayedexpansion
  2. :d
  3. set ddr=!random!
  4. echo 原始随机数:!ddr!
  5. set ddd=!ddr:-4,1!
  6. if defined ddd if not "!ddr:~-1,1!"=="!ddr:~-2,1!" if not "!ddr:~-3,1!"=="!ddr:~-4,1!" if not "!ddr:~-1,1!"=="!ddr:~-3,1!" if not "!ddr:~-2,1!"=="!ddr:~-4,1!" if not "!ddr:~-2,1!"=="!ddr:~-3,1!" if not "!ddr:~-1,1!"=="!ddr:~-4,1!" echo 新生随机数:!ddr:~-1,1!!ddr:~-2,1!!ddr:~-3,1!!ddr:~-4,1!||goto d
  7. pause
  8. goto d
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set a=0123456789
  3. set b=10
  4. set tt=
  5. set/p tt=输入您需要的几位不重复数字:
  6. set ttt=9999999999
  7. :1
  8. set ttt=!ttt:~0,%tt%-1!
  9. set/a n=!random!%%10
  10. set/a b-=1
  11. if !b! equ 0 (echo 洗牌完毕&goto 2)
  12. set aa=!a:~%n%,1!
  13. set a=!aa!!a:%aa%=!
  14. echo !a!>a.txt
  15. goto 1
  16. :2
  17. for /f %%i in (a.txt) do (
  18. set jg=%%i
  19. set jg1=!jg:~0,%tt%!
  20. set jg2=!jg:~1,%tt%!
  21. if !jg1! gtr !ttt! (echo !jg1!) else (echo !jg2!
  22. ))
  23. pause&del a.txt
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set a=0123456789
  3. set b=
  4. set/p b=输入随机洗牌次数:
  5. :1
  6. set/a n=!random!%%10
  7. set/a b-=1
  8. if !b! equ 0 (echo 洗牌完毕&goto 2)
  9. set aa=!a:~%n%,1!
  10. set a=!aa!!a:%aa%=!
  11. echo !a!>a.txt
  12. goto 1
  13. :2
  14. for /f %%i in (a.txt) do (
  15.         set jg=%%i
  16.         set jg1=!jg:~1,4!
  17.         set jg2=!jg:~2,4!
  18.         if !jg1! gtr 999 (echo !jg1!) else (echo !jg2!
  19. ))
  20. pause&del a.txt
复制代码

TOP

27楼回贴只看到第一个条件,

再来个满足两个条件的:(随机列出所有四位数,并满足一楼的两个条件要求)

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (0,1,9) do set ms=!ms! %%i
  3. set as=!ms: 0=!
  4. (
  5. for %%a in (!as!) do (
  6.   set bs=!ms: %%a=!
  7.   for %%b in (!bs!) do (
  8.     set cs=!bs: %%b=!
  9.     for %%c in (!cs!) do (
  10.       set ds=!cs: %%c=!
  11.       for %%d in (!ds!) do (
  12.         echo;!random! %%a%%b%%c%%d
  13. ) ) ) )
  14. )>nums.tmp
  15. for /f "tokens=2" %%a in ('sort nums.tmp') do (echo;%%a)
  16. pause
复制代码
1

评分人数

TOP

我测了一下总数
15楼的代码找到漏洞:
筛选重复数字的部分:
for /l %%j in (0,1,9) do (
set ss=!#%%i:%%j=!
if !ss! lss 100 (set "#%%i=")
)


这里,比如数字是1023 , 剔除1=023
而023<100 所以会被清理。 所以15楼的代码永远不会出现10开头的4位数

TOP

回复 27楼 的帖子

刚刚想了一下 , inittab 的剔除重复数字的应该是比较全面稳妥的做法
本顿的测试导出100个,偶尔是会出现重复的,
如果数字更大一些,重复的会多一些。

回忆到以前学概率的时候哎,0-9组成 4位数,每一位不重复,第一位不能为0
9*9*8*7=4536 种不同结果

[ 本帖最后由 523066680 于 2010-9-27 22:40 编辑 ]

TOP

炒冷饭呀~~~
我也来个,一次搞得一百个。
不够么!!自己把100改大点。。。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (0,1,9) do set ms=!ms!%%i
  3. :lp
  4. for /l %%i in (1,1,100) do (
  5.   set ns=!ms!
  6.   set n=9
  7.   set/a v=!random!%%9+1
  8.   for %%b in (!v!) do set s=!ns:~%%b,1!
  9.   for /l %%a in (1,1,3) do (
  10.     for %%b in ("!s:~-1!") do set ns=!ns:%%~b=!
  11.     set /a v=!random!%%n,n-=1
  12.     for %%b in (!v!) do set s=!s!!ns:~%%b,1!
  13.   )
  14. echo !s!
  15. )
  16. pause
  17. goto :lp
复制代码

TOP

擦啊……都这么精简
粗也上了
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a mi=0
  4. :main
  5. for /l %%a in (0,1,9) do (set arr[%%a]=%%a)
  6. set /a i=0,num=%random% %% 9+1
  7. set /a arr[%num%]=arr[9]
  8.    :next
  9.      set /a i+=1,rnd=%random% %% (10-i),last=9-i
  10.      set /a rand=!arr[%rnd%]!,num=num*10+rand,arr[%rnd%]=arr[%last%]
  11.    if %i% lss 3 goto :next
  12.    if defined number[%num%] (goto :main) else (
  13.        set /a number[%num%]=1,mi+=1
  14.        echo %num%
  15.    )
  16. if %mi% lss 4 goto :main
  17. pause
复制代码

[ 本帖最后由 523066680 于 2010-9-28 15:08 编辑 ]

TOP

返回列表