中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决][难题]模拟输出数字九宫格
« [1] [2] [3] »
作者:
标题: [已解决][难题]模拟输出数字九宫格 上一主题 | 下一主题
terse
银牌会员





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

先抛个砖  成功率太低  那位继续
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 1 9) do call:lp %%i
pause&goto :eof
:lp
set/a var=!random!%%9+1
if defined .!var! (goto lp)else set/a n+=1&set str=!var! !str!&set .!var!=a
   if !n! lss 9 goto lp
   for /l %%i in (1 1 9) do set .%%i=
   set var=%str%&set n=1
:lp0
for %%a in (!var!) do (
if defined .%%a set var=!var:%%a=!&goto lp0
  for /l %%i in (1 1 %1) do if %%a equ !%%i%n%! set var=!var:%%a=!&goto lp0
     set %1!n!=%%a&set .%%a=ok
        if !n! lss 9 set/a n+=1&set var=!str:%%a=!&goto lp0
       )
        set str=&set n=
for /l %%i in (1 1 9) do set .%%i=
for /l %%i in (9 -1 1) do if "!%1%%i!"=="" set str=&set n=&goto lp
for /l %%i in (1 1 9) do set .%%i=&set/p=!%1%%i! <nul
echo.
[ Last edited by terse on 2008-8-10 at 05:23 PM ]

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




简单!简单!再简单!
2008-8-10 17:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 17 楼』:  

先生成一个规则的矩阵,然后交替进行行列交换,应该可以达到随机效果

2008-8-10 20:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 18 楼』:  

感觉很像之前d一个老大出的乱序产生0-99数字的二维版,相关的算法应该都可以借鉴

2008-8-10 20:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 19 楼』:  

问:对角斜线中的数字是否能出现相同数字



综合型编程论坛

我的作品索引
  
2008-8-10 22:20
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 20 楼』:  

弄了一个7*7的……改成9*9 的弄到一半就就停了……
@echo off
setlocal enabledelayedexpansion
set a=0
for %%a in (1 2 3 4 5 6 7) do (set n%%a=%%a)
set /a n0=1,n8=2,n9=3
:a
set /a a+=1,b=0
md TheTest\hang%a%
   :b
   set /a b+=1
   if not exist TheTest\Lie%b% (md TheTest\Lie%b%)
            :b-1
             set num=!n%random:~1,1%!
             if exist TheTest\Hang%a%\!num! (goto :b-1)
             if exist TheTest\Lie%b%\!num! (goto :b-1)
             md TheTest\Hang%a%\!num!
             md TheTest\Lie%b%\!num!
             set h%a%=!num! !h%a%!
    if %b% equ 7 (goto :b-end) else (goto :b)
:b-end
if %a% equ 7 (goto :end) else (goto :a)
:end
for /l %%a in (1,1,9) do echo,!h%%a!
pause>nul
--------------……这代码不好……

[ Last edited by 523066680 on 2008-8-16 at 05:56 PM ]



综合型编程论坛

我的作品索引
  
2008-8-11 10:19
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 21 楼』:  

想太简单了,撤回17-18楼,
看各位老大解题

2008-8-11 13:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 22 楼』:  为我欢呼吧,哈哈...

努力想啊想的,终于给我弄出来了,头发白了不少^_^,最主要是在出现死循环的时候如何重置.
乘着奥运的热风,让我满足一下一点点虚荣心吧.

  Quote:

  1. @echo off
  2. title 数字九宫格 Code By cn-dos moniuming
  3. Setlocal Enabledelayedexpansion
  4. for /l %%i in (1 1 9) do (set "bat=!bat! %%i")
  5. :begin
  6. echo.
  7. for /l %%i in (1 1 9) do (set "str%%i=%bat%")
  8. for /l %%a in (9 -1 1) do (call :loop1 %%a)
  9. echo.&pause&goto :begin
  10. :loop1
  11. if "%n%"=="9" (
  12.    set "n=0"&echo %var%&set "var="
  13.    for /l %%c in (1 1 9) do (set "%%c="&set "string%%c=")
  14.    goto :eof
  15. )
  16. set /a "n+=1"
  17. for /l %%f in (1 1 9) do (
  18.    if not defined string%%f (set "string%%f=!str%%f!")
  19. )
  20. :loop2
  21. set /a "ttl+=1"
  22. if "%ttl%"=="30" (
  23.    set "ttl=0"&set "var="&set "n=0"
  24.    for /l %%e in (1 1 9) do (set "%%e="&set "str%%e=!string%%e!")
  25.    goto :loop1
  26. )
  27. set /a "mdl=%random%%%%1+1"
  28. for /f "tokens=%mdl%" %%d in ("!str%n%!") do (
  29.    if defined %%d goto :loop2
  30.    set "ttl=0"
  31.    set "var=!var! %%d"
  32.    set "%%d=dos"
  33.    set "str%n%=!str%n%:%%d=!"
  34. )
  35. goto :loop1
        moniuming发表于:  2008-08-11  13:31



   此帖被 +17 点积分       点击查看详情   
评分人:【 523066680 分数: +8  时间:2008-8-11 14:05
评分人:【 pusofalse 分数: +9  时间:2008-8-11 14:25


2008-8-11 13:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 23 楼』:  

哇 还是穷举的!强!



综合型编程论坛

我的作品索引
  
2008-8-11 14:06
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



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



  Quote:
Originally posted by 523066680 at 2008-8-11 14:06:
哇 还是穷举的!强!

这个可不是穷举的,呵呵,不过也差不多了,汗...

2008-8-11 14:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 25 楼』:  

穷举吧。。那个ttl=30
但依然精彩,学习了!



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-8-11 14:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



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



  Quote:
Originally posted by pusofalse at 2008-8-11 14:26:
穷举吧。。那个ttl=30
但依然精彩,学习了!

ttl=30是指每一位数字的计算次数限制在30次以内,如果超过的话就重置
其实取值范围是在已经出现的数字以外取的,并不是穷举

2008-8-11 14:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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

修正16楼的
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 1 9) do call:lp %%i
pause&exit
:lp
for /l %%i in (1 1 9) do set .!random!!random!!random!=%%i
   for /f "tokens=1,2 delims==" %%i in ('set .') do set str=%%j !str!&set %%i=
      for /l %%i in (1 1 9) do set %1%%i=
      set var=%str%&set n=1
:lp0
for %%a in (!var!) do (
if defined .%%a set var=!var:%%a=!&goto lp0
  for /l %%i in (1 1 %1) do if %%a equ !%%i%n%! set var=!var:%%a=!&goto lp0
     set %1!n!=%%a&set .%%a=ok
        if !n! lss 9 set/a n+=1&set var=!str:%%a=!&goto lp0
       )
        set str=&set n=
        for /l %%i in (1 1 9) do set .%%i=
        if "!%19!"=="" goto lp
        for /l %%i in (1 1 9) do set .%%i=&set/p=!%1%%i! <nul
echo.


   此帖被 +8 点积分        点击查看详情   
评分人:【 moniuming 分数: +8  时间:2008-8-15 11:53




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

永远的菜鸟



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

好东西
学习了......

2008-8-15 11:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 29 楼』:  

我觉得17楼的方法可行 而且效率很高 看代码

  Quote:
Originally posted by obsolete at 2008-8-10 08:23 PM:
先生成一个规则的矩阵,然后交替进行行列交换,应该可以达到随机效果


@echo off
setlocal enabledelayedexpansion
set h1=123456789
set h2=234567891
set h3=345678912
set h4=456789123
set h5=567891234
set h6=678912345
set h7=789123456
set h8=891234567
set h9=912345678
:a
set /a a=0,b=0
  :b
  set /a a+=1
     :b1
     set n=%random:~-1%
     if %n% equ 9 set n=8
     if not defined Ex%n% (
     for /l %%a in (1,1,9) do (call,set hang%%a=!hang%%a! %%h%%a:~!n!,1%%)
     ) else (goto :b1)
  set Ex%n%=ex
  if %a% lss 9 goto :b
  :c
    set /a b+=1
     :c1
     set n=%random:~-1%
     if %n% equ 0 set n=9
     if not defined Ex2%n% (echo !hang%n%!) else (goto :c1)
  set Ex2%n%=ex
  if %b% lss 9 goto :c
pause
for /l %%a in (0,1,9) do (
set Ex%%a=
set Ex2%%a=
set hang%%a=
)
goto :a
[ Last edited by 523066680 on 2008-8-16 at 08:09 PM ]

   此帖被 +8 点积分        点击查看详情   
评分人:【 moniuming 分数: +8  时间:2008-8-17 13:38




综合型编程论坛

我的作品索引
  
2008-8-16 18:07
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



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

真高兴有那么精彩的代码,不过很可惜的是29楼的代码有规律可循,不能在九宫格游戏中运用,否则解题将不会有任何难度.

2008-8-17 13:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: