中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]随机生成不重复的10组7位数字的组合
作者:
标题: [求助]随机生成不重复的10组7位数字的组合 上一主题 | 下一主题
leman
新手上路





积分 6
发帖 2
注册 2008-2-29
状态 离线
『楼 主』:  [求助]随机生成不重复的10组7位数字的组合

随即生成 10组 7位数字的组合,并不会重复

并判断10对组合每位出现次数
例如随即生成
1234567
1234567

-------------
1出现2次 2出现2次......

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-11-10]在帖子标题中增加搜索关键字
说明:原标题"[求助]高手帮我写个关于数字随即脚本!"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-11-10 at 14:25 ]

2008-2-29 17:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 2 楼』:  

自己搜索.

2008-2-29 18:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qdloverr
初级用户





积分 97
发帖 33
注册 2007-3-5
状态 离线
『第 3 楼』:  

@echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,10) do (
set aa=!RANDOM!!RANDOM!!RANDOM!!RANDOM!!RANDOM!!RANDOM!
set aa=!aa:~0,7!
echo !aa!)
pause

后面的。。。。等斑斑

[ Last edited by qdloverr on 2008-3-1 at 12:40 PM ]

2008-3-1 12:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 4 楼』:  


@echo off
setlocal enabledelayedexpansion
:begin
type nul>"%temp%\temp.txt"
for /l %%a in (1,1,10) do (
set aa=!random!!random!!random!!random!!random!!random!!random!
set ab=!aa:~0,7!
echo !ab!
set/p=!ab!<nul >>"%temp%\temp.txt"
)
echo.
for /f "delims=" %%i in ('type "%temp%\temp.txt"') do set ac=%%i
set ad=0123456789
for /l %%b in (0,1,9) do (
set ae=0
set af=!ad:~%%b,1!
call :aaa
)
echo.&pause&cls&goto begin
:aaa
for /l %%j in (0,1,69) do (
set ag=!ac:~%%j,1!
if !ag!==!af! set /a ae+=1
)
echo !af!已经出现!ae!次
goto :eof
[ Last edited by moniuming on 2008-4-12 at 11:44 PM ]

2008-3-3 13:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 5 楼』:  

好多天无法登陆论坛,今天终于可以了,点击"我的话题"发现全没了,在"我的收藏"中发现了此贴,想想当初的想法确实不够好,今天作了完善,效率更高,而且也不用产生临时文件,在此感谢CN-DOS论坛及帮助过我的各位论坛的朋友,让我得到了进步,再次感谢!!!
@echo off
setlocal enabledelayedexpansion
:again_
echo.
set "yao="
for /l %%a in (0 1 9) do (
   set ming=!random!!random!!random!!random!!random!!random!!random!
   set ming=!ming:~-7!
   echo  !ming!
   set yao=!yao!!ming!
)
echo.
for %%a in (0 1 2 3 4 5 6 7 8 9) do (
   set n=0
   call :count %%a
)
echo.&pause&cls&goto :again_
:count
for /l %%i in (0 1 69) do (
   set fen=!yao:~%%i,1!
   if !fen!==%1 set /a n+=1
)
echo  %1 已经出现 !n! 次


2008-6-19 11:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  


@echo off
for /l %%a in (1 1 10) do call :loop
for /l %%a in (0 1 9) do if defined _%%a call echo %%a 出现 %%_%%a%% 次
pause>nul
:loop
  set "var=%random%%random%%random%%random%%random%%random%%random%"
  set "var=%var:~-7%"
  if defined .%var% goto loop
  echo %var%
  set .%var%=a
:loop2
set /a _%var:~0,1%+=1
set var=%var:~1%
if defined var goto loop2
goto :eof


   此帖被 +8 点积分        点击查看详情   
评分人:【 moniuming 分数: +8  时间:2008-6-19 18:20




致精致简!
2008-6-19 16:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 7 楼』:  

试着生成1000个数字  貌似这样效率高
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 1000) do call :loop
for /f "tokens=1,2 delims=.=" %%i in ('set.') do echo %%i 出现 %%j 次
pause
goto :eof
:loop
  set "str=%random%%random%%random%%random%%random%%random%%random%"
  set "str=%str:~-7%"
  if defined %str% goto loop
  echo %str%
  set %str%=a
  for /l %%i in (0 1 6) do set/a .!str:~%%i,1!+=1


   此帖被 +8 点积分        点击查看详情   
评分人:【 moniuming 分数: +8  时间:2008-6-19 18:20




简单!简单!再简单!
2008-6-19 16:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 8 楼』:  

6,7楼的算法比我的好多了,向你们学习了

   此帖被 +1 点积分    点击查看详情   
评分人:【 分数: +1  时间:2009-1-21 23:17


2008-6-19 18:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 9 楼』:  

经测试发现5楼的代码花的时间比6楼和7楼的代码花的时间还要少,有兴趣的朋友可以试试,在我的机子上5楼的平均用时是0.15秒,6楼0.45秒,7楼0.25秒.

2008-6-20 15:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by moniuming at 2008-6-20 15:36:
经测试发现5楼的代码花的时间比6楼和7楼的代码花的时间还要少,有兴趣的朋友可以试试,在我的机子上5楼的平均用时是0.15秒,6楼0.45秒,7楼0.25秒.

你生成1000组看看  而且5楼有重复生成可能 排除重复的看看

   此帖被 +4 点积分      点击查看详情   
评分人:【 moniuming 分数: +4  时间:2008-6-20 16:51




简单!简单!再简单!
2008-6-20 15:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by terse at 2008-6-20 15:52:

你生成1000组看看  而且5楼有重复生成可能 排除重复的看看

确实,当生成1000组的时候看到了差别,最主要是统计的方法,7楼的效率最高,平均才十几秒,6楼的要四十几秒,5楼的效率最差了,汗...,呵呵

2008-6-20 16:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  

也来一个:
@echo off&setlocal enabledelayedexpansion
set t=%time%
:begin
set codes=0 1 2 3 4 5 6 7 8 9
set code=%codes: =%
set /a m+=1,n=10,v=-1
:lp
set /a n-=1,a=%random%%%%n%
set a=!code:~%a%,1!
set str%m%=!str%m%! %a%&set code=!code:%a%=!
if %n% gtr 3 goto lp
for %%a in (%codes%) do (
    set /a v+=1
    for %%i in (!str%m%!) do (
        if %%a equ %%i set /a _!v!+=1
    )
)
if %m% lss 10 goto begin
for /l %%i in (1,1,10) do echo !str%%i!
echo.
for /l %%i in (0,1,9) do echo %%i出现次数为:!_%%i!次
echo 开始时间:%t%
echo 结束时间:%time%
pause>nul




批处理之家新域名:www.bathome.net
2008-6-20 17:52
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 13 楼』:  

测试以下的  不知道为什么貌似比前面的效率高点
@echo off&setlocal enabledelayedexpansion
for /l %%a in (1 1 10000) do call :loop
    for /f "tokens=1,2 delims=.=" %%i in ('set.') do echo %%i 出现 %%j 次
pause
goto :eof
:loop
  for /l %%i in (1 1 7) do set str=!random:~-1!!str!
  if defined %str% goto loop
  for /l %%i in (0 1 6) do set/a .!str:~%%i,1!+=1
  echo %str%&set str=


   此帖被 +6 点积分       点击查看详情   
评分人:【 moniuming 分数: +6  时间:2008-6-20 20:51




简单!简单!再简单!
2008-6-20 20:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by terse at 2008-6-20 20:29:
测试以下的  不知道为什么貌似比前面的效率高点
[code]
@echo off&setlocal enabledelayedexpansion
for /l %%a in (1 1 10000) do call :loop
    for /f "tokens=1,2 delims ...

效率确实提高了一些,原因可能在于生成7个数字的时候吧

2008-6-20 20:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 15 楼』:  

简化下我的代码:
@echo off&setlocal enabledelayedexpansion
set t=%time%
:begin
set codes=0 1 2 3 4 5 6 7 8 9
set code=%codes: =%
set /a m+=1,n=10
:lp
set /a n-=1,a=%random%%%%n%
set a=!code:~%a%,1!
for %%i in (%codes%) do if %%i equ %a% set /a _%%i+=1
set str%m%=!str%m%!%a%&set code=!code:%a%=!
if %n% gtr 3 goto lp
echo !str%m%!
if %m% lss 1000 goto begin
echo.
for /l %%i in (0,1,9) do echo %%i出现次数为:!_%%i!次
echo 开始时间:%t%
echo 结束时间:%time%
pause>nul
[ Last edited by zw19750516 on 2008-6-21 at 02:09 PM ]



批处理之家新域名:www.bathome.net
2008-6-21 14:06
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: