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

回复 27楼 的帖子

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

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

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

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

返回列表