中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 16:59
47,811 主题排行 / 349,896 发帖 / 今日 1 篇 / 48,254 会员排行
DOS批处理 & 脚本技术(批处理室) » [已解决][难题]模拟输出数字九宫格
可打印版本  3,915 / 35
第16楼 terse 发表于 2008-08-10 17:16
银牌会员 发帖 946 积分 2,404
先抛个砖 成功率太低 那位继续


[ Last edited by terse on 2008-8-10 at 05:23 PM ]
第17楼 obsolete 发表于 2008-08-10 20:23
初级用户 发帖 72 积分 192
先生成一个规则的矩阵,然后交替进行行列交换,应该可以达到随机效果
第18楼 obsolete 发表于 2008-08-10 20:32
初级用户 发帖 72 积分 192
感觉很像之前d一个老大出的乱序产生0-99数字的二维版,相关的算法应该都可以借鉴
第19楼 523066680 发表于 2008-08-10 22:20
银牌会员 发帖 1,133 积分 2,362
问:对角斜线中的数字是否能出现相同数字
第20楼 523066680 发表于 2008-08-11 10:19
银牌会员 发帖 1,133 积分 2,362
弄了一个7*7的……改成9*9 的弄到一半就就停了……


--------------……这代码不好……

[ Last edited by 523066680 on 2008-8-16 at 05:56 PM ]
第21楼 obsolete 发表于 2008-08-11 13:16
初级用户 发帖 72 积分 192
想太简单了,撤回17-18楼,
看各位老大解题
第22楼 moniuming 发表于 2008-08-11 13:50
银牌会员 发帖 574 积分 1,335 来自 广西
为我欢呼吧,哈哈...
努力想啊想的,终于给我弄出来了,头发白了不少^_^,最主要是在出现死循环的时候如何重置.
乘着奥运的热风,让我满足一下一点点虚荣心吧.


  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
第23楼 523066680 发表于 2008-08-11 14:06
银牌会员 发帖 1,133 积分 2,362
哇 还是穷举的!强!
第24楼 moniuming 发表于 2008-08-11 14:20
银牌会员 发帖 574 积分 1,335 来自 广西
Originally posted by 523066680 at 2008-8-11 14:06:
哇 还是穷举的!强!

这个可不是穷举的,呵呵,不过也差不多了,汗...
第25楼 pusofalse 发表于 2008-08-11 14:26
银牌会员 发帖 646 积分 1,604
穷举吧。。那个ttl=30
但依然精彩,学习了!
第26楼 moniuming 发表于 2008-08-11 14:30
银牌会员 发帖 574 积分 1,335 来自 广西
Originally posted by pusofalse at 2008-8-11 14:26:
穷举吧。。那个ttl=30
但依然精彩,学习了!

ttl=30是指每一位数字的计算次数限制在30次以内,如果超过的话就重置
其实取值范围是在已经出现的数字以外取的,并不是穷举
第27楼 terse 发表于 2008-08-14 19:28
银牌会员 发帖 946 积分 2,404
修正16楼的
第28楼 moniuming 发表于 2008-08-15 11:55
银牌会员 发帖 574 积分 1,335 来自 广西
精彩!!!
好东西
学习了......
第29楼 523066680 发表于 2008-08-16 18:07
银牌会员 发帖 1,133 积分 2,362
我觉得17楼的方法可行 而且效率很高 看代码
Originally posted by obsolete at 2008-8-10 08:23 PM:
先生成一个规则的矩阵,然后交替进行行列交换,应该可以达到随机效果



[ Last edited by 523066680 on 2008-8-16 at 08:09 PM ]
第30楼 moniuming 发表于 2008-08-17 13:43
银牌会员 发帖 574 积分 1,335 来自 广西
精彩!!!
真高兴有那么精彩的代码,不过很可惜的是29楼的代码有规律可循,不能在九宫格游戏中运用,否则解题将不会有任何难度.
上一页  1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023