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

[其他] [分析代码]批处理随机输出数字1~100不重复

我试着分析一次哈~  

@echo off
for /l %%a in (1,1,100) do (call set _%%random%%_%%a=%%a)
for /f "delims== tokens=2" %%a in ('set _') do (echo %%a)
pause



原理:     %%a从1~100  把他们赋值给 变量名“_%random% ” 这样,当把名称有序列出时,对应的值就被打乱了
        但是 当出现%random% 两次相同时,就会因变量名相同而把上次的值给替换掉,

              于是,就以_%%random%%_%%a 为名,而%%a是1-100不重复,中间又用 _ 隔开,绝不会出现替代。

后面的一句for就是把变量名有序输出,并显示他们的值。


我只用这个代码做过一个效果:随机打出图像的点,不重复
不知道有没有人能举一个好的应用例子呢,为表感谢分享 我会酌情加分的。

[ 本帖最后由 523066680 于 2009-3-16 09:21 编辑 ]
2

评分人数

我自己顶~
真是的~ 难怪我喜欢写特效,写特效有人加分,写别的东西这么快就沉了

大伙多少说说对这个帖子的观点嘛

TOP

本帖最后由 523066680 于 2011-4-26 09:15 编辑

"问题是:
1.你为了获得一个100以内的数,就需要random100次!
如果是值域是1-1000000以内的呢?你是不是要random 100万次吗!"

"这个问题就是在描述事实,但是没有指出问题哇。"

啊喏,random100万次不是主要问题吧?  你要说的应该是储存100万个变量这个事情。
这个时候 随机数只有 五位数,随机性质方面可能有影响,但是可以通过组合随机数达到X位数。
不管怎么想,我觉得为了获得随机数不重复,"random XX次" 始终还是要滴。
我的马甲在4楼写了一个用随机抽取N次的,效率上会差点吧。

如果有一张大尺寸图片要随机渐显,俺也会采用分块的方式渐显,而不是逐像素地显示,
那样太耗时间了

TOP

在一两百个数的情况下,用逐个提取的方法要快得多。
数量大的时候当然是set 变量特征 要快一些了,毕竟是内部处理的。
  1. @echo off
  2. set t=%time%
  3. setlocal enabledelayedexpansion
  4.     rem 从数组中随机提取元素,装载到SRand
  5.     rem 根据提取的个数,逐步缩小提取范围
  6.     for /l %%a in (1,1,100) do (set Code[%%a]=%%a)
  7.     set "SRand="
  8.     for /l %%a in (100,-1,1) do (
  9.         set /a R=!random! %% %%a + 1
  10.         for %%b in (!R!) do echo !Code[%%b]!
  11.         set Code[!R!]=!Code[%%a]!
  12.     )
  13. echo %t% %time%
  14. pause
复制代码

TOP

返回列表