[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  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

  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. :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

@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. :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

好理解一点的

  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
  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. 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

内容………

TOP

  1. @echo off
  2. set /a "x=%random%%%10000"
  3. if %x% lss 1000 ( set /a "x+=1000" )
  4. echo %x%
复制代码

TOP

大概是中规中矩的办法吧...
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=1234567890
  4. set n=9
  5. for /l %%a in (1 1 4) do (
  6. set /a rd=!random!%%!n!
  7. call set n%%a=%%str:~!rd!,1%%
  8. call set str=%%str:!n%%a!=%%
  9. set /a n=!n!-1
  10. )
  11. echo %n1%%n2%%n3%%n4%
复制代码

TOP

关于楼主这个题目,目前为止(竟然3年多了)几乎没有人做到楼主的第2个要求,正如楼主在10楼所说,“对于多个随机数,没有进行重复性判断(尽管这种几率很小)”。我想,如果把这个题目的要求1改一下,生成100个3位数或者10个2位数,这样重复的几率就很大了,必须考虑判断重复性。

下面是俺写的一段关于判断重复性的代码:
  1. set "AllNum="
  2. :LOOP
  3. 产生一个满足要求1的随机数num的部分代码略
  4. REM 判断重复性
  5. if not defined AllNum (
  6. set "AllNum=%num%"
  7. set /a n=1
  8. goto :LOOP
  9. )
  10. set "temp=%AllNum%"
  11. set "temp=!temp:%num%=!
  12. REM 如果%AllNum%去掉%num%前后是同一个字符串,
  13. REM 则说明%num%与先前产生的随机数不重复。
  14. if "%temp%"=="%AllNum%" (
  15. set "AllNum=%AllNum%,%num%"
  16. set /a n+=1
  17. if !n! geq 4 goto :LIST
  18. )
  19. goto :LOOP
  20. :LIST
  21. echo %AllNum%
复制代码

[ 本帖最后由 mac007cn 于 2011-1-13 10:04 编辑 ]

TOP

稍等一下   正在修改   有问题

[ 本帖最后由 stuqx 于 2011-1-13 18:13 编辑 ]

TOP

用了最笨的方法,但可以实现功能
为什么我总是想不到简单的方法,是我对命令还不够熟悉吗?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :sat
  4. set num=%random%
  5. if %num% lss 1000 goto :sat
  6. if %num% gtr 9999 goto :sat
  7. set a=%num:~0,1%
  8. set b=%num:~1,1%
  9. set c=%num:~2,1%
  10. set d=%num:~3,1%
  11. echo !a!
  12. echo !b!
  13. echo !c!
  14. echo !d!
  15. if !a! == !b! goto :sat
  16. if !a! == !c! goto :sat
  17. if !a! == !d! goto :sat
  18. if !b! == !c! goto :sat
  19. if !b! == !d! goto :sat
  20. if !c! == !d! goto :sat
  21. echo %num%
  22. pause
复制代码
菜鸟一个,潜心学习
总有学会的一天

TOP

本帖最后由 scarcr 于 2011-8-7 11:00 编辑

嗯,首先,我遇到了一个麻烦,从昨天晚上6点弄个现在,7个小时,学到了许多也没有解决。
我在运行 call set %%var:%a%=%%这种类型的嵌套变量的时候是注定要跳错进入死循环的。
自我无奈之后,坛子里有这种句式的代码我也运行了六七套,全部失败。
看来,非战之罪。所以,我还是把我写的代码交上来吧,大家看看,有错帮我找出来啊。谢谢。

我在想我用的盗版xp还真的是恶心人啊,就是贪ghost方便了,结果系统驱动也没有装好,运行ghost总有意外的惊喜,
不过我是有正版的xp序列号的,还是professional,不过这年头装原版xp是有自残倾向的,太慢了,又太费劲了。

15楼的这段的'set #'这里是什么意思,什么效果,理解不能呢。
for /f "tokens=2 delims=#=" %%i in ('set #') do echo %%i

这段实现了题目的全部要求,生成四个四位不同的不同的随机数。
第二个for循环我手动输入数测试了一下,没有问题,这个程序理论上可以生成所有的四位不同的四位数,只是会越来越慢
只要改一下!m! equ 4这里,还有第二个for循环的( 1 1 4 )这里,把4改成别的数,可以获得想要位数的四位不同随机数,
如果使用变量,可以由键盘输入需要数目的随机数,这样题目的要求就扩展了。
我认为我完成了。累死了。
  1. @echo off&setlocal enabledelayedexpansion
  2. :A
  3. if !m! equ 4 (pause&goto :eof)
  4. set /a nu=%random%%%9000+1000&set a=%nu%
  5. for /l %%i in (1,1,3) do (
  6.     set "b=!a:~,1!"&&set "c=!a:~1!"
  7.     call set "b=%%a:!b!=%%"
  8.     if !b! equ !c! (set a=!c!) else (goto A)
  9.     )
  10. for /l %%i in (1,1,4) do (
  11.     if "!#%%i!"=="" (
  12.         set #%%i=!nu!&&echo !#%%i!&&set /a m+=1&&goto A
  13.         ) else if !#%%i! equ !nu! (goto A))
复制代码
获得经验有二,
当你无法取得成功时,可以去看看成功人士的例子,也许会柳暗花明又一村。
第二个for循环的第一个if判断里应该使用&&而不是使用&,避免出现命令运行不完整的现象,嗯,我这里出现了,所以改成现在这个样子。

TOP

返回列表