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

我也试试

请问楼主:是产生一个四位数都不重复的数,还是产生四个四位数都不重复的数??
思路:随机取出该数的千、百、十、个位的数字,然后判断该数是否跟前面取的数重复;还要判断是否已经取满四个数
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=0123456789
  4. :main
  5. cls
  6. set var=
  7. :a
  8. set s1=!str:0=!
  9. set/a num=%random%%%9
  10. set num1=!s1:~%num%,1!
  11. set s2=!str:%num1%=!
  12. set/a num=%random%%%9
  13. set num2=!s2:~%num%,1!
  14. set s3=!s2:%num2%=!
  15. set/a num=%random%%%8
  16. set num3=!s3:~%num%,1!
  17. set s4=!s3:%num3%=!
  18. set/a num=%random%%%7
  19. set num4=!s4:~%num%,1!
  20. set num=!num1!!num2!!num3!!num4!
  21. set/a n=0
  22. for %%a in (!var!) do (
  23. set/a n+=1
  24. if %%a equ !num! goto :a
  25. )
  26. if !n!==4 (echo !var!&pause>nul&goto main) else (set var=!var! !num!&goto :a)
复制代码

[ 本帖最后由 sjzong 于 2009-4-25 15:55 编辑 ]

TOP

回 15 楼的

15楼的思路的确很有新意!
但是我有两个疑问:
1、如果题目假设成求出全部四位不重复的四位数时,那循环次数是非常多了,速度就慢多了,因为1000~9999就有9000个,然后每一个再来删除重复字符(0~9共10),那就要运行9000*10次数!
       换成另一种思路:先取千位(千位为10个数字扣除0,共9个),再取百位(百位为10个数字扣除千位的数字,共9个),再取十位(十位为10个数字扣除千位、百位两个,共8个),最后取个位(个位为10个数字扣除千位、百位、十位三个,共7个),利用排列组合,列出所有的数需要运行9*9*8*7=4536次。
       那两种思路的效率高呢??? 希望楼主按你的思路写出可以列出四位不重复的四位数代码,然后跟下面代码对比一下,看看速度怎么样?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=0 1 2 3 4 5 6 7 8 9
  4. set s1=!str:0=!
  5. for %%a in (!s1!) do (
  6. set s2=!str:%%a=!
  7. for %%b in (!s2!) do (
  8. set s3=!s2:%%b=!
  9. for %%c in (!s3!) do (
  10. set s4=!s3:%%c=!
  11. for %%d in (!s4!) do (
  12. set/a num+=1
  13. echo %%a%%b%%c%%d
  14. ))))
  15. echo !num!
  16. pause
复制代码

2、题目所提出的数字要求是随机数,按照15楼的方法时就难免会出现重复的数,就是第一次取随机数1234,有可能也取1234,虽然这种概率很小的!但毕竟存在。

TOP

返回列表