中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 出题,通过批处理输出九宫格(不限级别)
« [1] [2] »
作者:
标题: 出题,通过批处理输出九宫格(不限级别) 上一主题 | 下一主题
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 16 楼』:  

结果是8种啊, 我在2楼说2次随机数, 第一次随机数取法有4种可能, 第2次取法只剩2种可能.

所以结果是 4*2=8, 就像15楼做的那样.



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-17 08:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

确实是有 8 种,
原来如此简单,交换一下位置就可以了。。

  Quote:

  1. @echo off&color 1f
  2. :start
  3. set /a str=2468,e=5,flag=0
  4. set /a w=%random%%%4
  5. call set x=%%str:~%w%,1%%
  6. if defined #%x% goto start
  7. set /a #%x%=1,a=x
  8. call set str=%%str:%a%=%%
  9. set /a i=15-e-a
  10. call set str=%%str:%i%=%%
  11. set /a w=%random%%%2
  12. call set c=%%str:~%w%,1%%
  13. call set str=%%str:%c%=%%
  14. set /a b=15-a-c,d=15-str-a,f=15-d-e,g=str,h=15-g-i
  15. :loop
  16. set /a nn+=1
  17. echo.&echo  第 %nn% 种&echo.
  18. echo ┏━━┳━━┳━━┓
  19. echo%a%  ┃ %b%  ┃ %c%  ┃
  20. echo ┣━━╋━━╋━━┫
  21. echo%d%  ┃ %e%  ┃ %f%  ┃
  22. echo ┣━━╋━━╋━━┫
  23. echo%g%  ┃ %h%  ┃ %i%  ┃
  24. echo ┗━━┻━━┻━━┛
  25. pause>nul&cls
  26. if %flag% equ 0 (
  27. set b=%d%&set d=%b%&set g=%c%&set c=%g%&set h=%f%&set f=%h%&set flag=1&goto loop
  28. )
  29. if %nn% neq 8 goto start
  30. echo.&echo  总共 %nn%
  31. pause>nul


                小楼一夜听春雨  2008-07-17  11:26



   此帖被 +6 点积分      点击查看详情   
评分人:【 bat-zw 分数: +6  时间:2008-7-17 17:25




致精致简!
2008-7-17 11:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 18 楼』:  

如果纯为显示,而不考虑通用性, 那么我下面的简单代码也能实现.
@echo off

:start
set /a num=%random%%%8
set /a num1=%num%%%2
if %num1%==0 (set str=14789632) else (set str=23698741)

call set "str=%%str:~%num%%%%%str:~0,%num%%%"

for /l %%i in (0,1,7) do call set n%%i=%%str:~%%i,1%%

echo %n1% %n6% %n3%
echo %n4% 5 %n0%
echo %n7% %n2% %n5%
echo.
pause
goto :start




我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-17 13:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


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

经改良后的方案:
@echo off&setlocal enabledelayedexpansion
:begin
for /l %%i in (1,1,9) do set "_%%i="
set "_5=5"&set "code=12346789"&set /a v=8,n=1
:again
if defined _%n% goto next
set /a a=%random%%%%v%
set "a=!code:~%a%,1!"
set /a m=n%%2,as=a%%2
if %m% equ %as% goto again
set "_%n%=%a%"&set /a b=10-a,c=10-n
set "code=!code:%a%=!"&set "code=!code:%b%=!"&set "_%c%=%b%"&set /a v-=2
:next
set /a n+=1&if !n! neq 5 goto again
set /a num1=_1+_2+_3,num2=_1+_4+_7
for %%i in (1 2) do if !num%%i! neq 15 goto begin
for /l %%i in (1,1,9) do set str=!str!!_%%i!
if defined _%str% (set "str="&goto begin) else (set "_%str%=%str%"&set /a num+=1)
cls&echo.&echo 第%num%种&echo.
set n=0&echo ┏━━┳━━┳━━┓
for /l %%i in (1,1,9) do (set /a n+=1
    set /p=┃ !_%%i!  <nul
    if !n! equ 3 (
       set "n=0"&set /p=┃<nul&echo.
       if %%i neq 9 (
          echo ┣━━╋━━╋━━┫
          ) else (
          echo ┗━━┻━━┻━━┛
)))
if %num% neq 8 ping /n 3 127.1>nul&goto begin
pause>nul
[ Last edited by zw19750516 on 2008-7-17 at 05:43 PM ]



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

永远的学习者


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



  Quote:
Originally posted by 26933062 at 2008-7-17 11:37:
确实是有 8 种,
原来如此简单,交换一下位置就可以了。。

现在仔细看了小楼兄的代码才知道自己想复杂了,看来老土的思路是完全正确的,确实刚开始写之前多思考下就不至于走那么大的弯路了。



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





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



  Quote:
但最值得一提的还是quya老土的解题思路,思路对才能正确解决问题,
这也是我所一直以来信奉的原则,所以我给老土加了满分20分。

非常同意楼主的这个观点,解题思路是首位、代码技巧其次。
一开始看到这个题,我都不知道从哪里下手,本决定放弃解此题的,所以有了3楼的回帖,(2楼的解题思路是后来补上去的)但一看到2楼的思路,茅塞顿开。。。



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


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



论坛跳转: