中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 05:15
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 出题,通过批处理输出九宫格(不限级别)
可打印版本  2,080 / 20
第1楼 bat-zw 发表于 2008-07-16 19:29
金牌会员 发帖 1,276 积分 3,105
出题,通过批处理输出九宫格(不限级别)
输出如下:

要求:里面的数字是随机生成的,任意三个连着的数之和为15(横加、竖加、斜
加)。

----------------------------------------------------------------------------------------------------------
目前最完美的答案是小楼兄写出来的,代码确实精练,所以加6分:

----------------------------------------------------------------------------------------------------------
但最值得一提的还是quya老土的解题思路,思路对才能正确解决问题,这也是我
所一直以来信奉的原则,所以我给老土加了满分20分。
----------------------------------------------------------------------------------------------------------
至此,我们通过重解此题有了最大的收获:一个人不仅要敢于挑战自己,更要勇
于挑战经典(老土的思路+小楼兄的代码已经超越了前版主namejm的经典方案)。
----------------------------------------------------------------------------------------------------------


[ Last edited by zw19750516 on 2008-7-17 at 05:41 PM ]
第2楼 quya 发表于 2008-07-16 19:50
高级用户 发帖 172 积分 558 来自 江苏
占个沙发,第一感觉先要处理的不是批处理,而是中间的那个数字只能是5。

不知我的猜测是否对,有了这个基础,才能下手编。

然后我们把左上第一格取个随机数a1,这个数一定是小于等于8的偶数,然后它的对角线上的数字a9一定是10-a1.

再在剩余的角上 a3 或者 a7 任取一个余下的偶数,最后一个角的偶数也定了。

奇数则分布在 a2, a4, a6, a8上, 4个偶数定了以后,奇数也就定了。

整个程序要用到2次随机数。

我们的思路也可以这样简化, 第一次产生一个不等于5,而且小于9的任意数,如果是偶数,则赋值给a1,否则赋值给a2.

[ Last edited by quya on 2008-7-16 at 08:48 PM ]
第3楼 26933062 发表于 2008-07-16 20:00
银牌会员 发帖 879 积分 2,268
这个问题已经有过经典答案了,看谁还能有突破,也好。
看看各位的功力。。。
我是作不出,弃权。。。!
第4楼 slore 发表于 2008-07-16 20:55
铂金会员 发帖 2,478 积分 5,212
貌似在这里有过讨论贴……

不限于3阶的。。。
第5楼 bat-zw 发表于 2008-07-16 21:06
金牌会员 发帖 1,276 积分 3,105
Originally posted by quya at 2008-7-16 19:50:
占个沙发,第一感觉先要处理的不是批处理,而是中间的那个数字只能是5。

不知我的猜测是否对,有了这个基础,才能下手编。

然后我们把左上 ...

老土的思路是对的
第6楼 pusofalse 发表于 2008-07-16 23:04
银牌会员 发帖 646 积分 1,604
头都大了。。。。前辈不妨先贴出来,一起研究。
第7楼 HAT 发表于 2008-07-16 23:12
版主 发帖 5,017 积分 9,023
to 6楼
注意搜索,呵呵。
第8楼 pusofalse 发表于 2008-07-16 23:18
银牌会员 发帖 646 积分 1,604
强人。。。不过感觉变得有点体力活了。。。
第9楼 bat-zw 发表于 2008-07-16 23:41
金牌会员 发帖 1,276 积分 3,105
Originally posted by pusofalse at 2008-7-16 23:18:
强人。。。不过感觉变得有点体力活了。。。

不瞒兄弟说,我真的还没找到好的解决方法,苦思中。。。
第10楼 26933062 发表于 2008-07-16 23:49
银牌会员 发帖 879 积分 2,268
如果只显示一种,按2楼的思路倒是好办,但如果要显示6种,确实有难度。。。
第11楼 quya 发表于 2008-07-17 00:19
高级用户 发帖 172 积分 558 来自 江苏
Originally posted by 26933062 at 2008-7-16 11:49 PM:
如果只显示一种,按2楼的思路倒是好办,但如果要显示6种,确实有难度。。。


按我的办法只要重复调用完全可以随机显示所有可能。

这个题目不难的, 难就难在N宫的问题。

实际上这只是3宫,并非9宫, 真正9宫是81格。其实5宫就有点难度了。

以奇数宫为例:

中间的数字是固定的,等于 (n*n+1)/2

4个角上的数字也是固定的,但可以轮换,分别是

(n*n+n)/2
(n*n-n+2)/2
(n*n+n+4)/2
(n*n-n-2)/2


假如代入楼主的3宫题,那么4个角上的数字分别为 6,4,8,2

4条边的中间数字分别是1, (n+3)/2, n*n, (n*n+1)-(n+3)/2, 其他规律大家可以推算一下, 反正是很复杂的。

如果是偶数宫, 情况又会不一样。

[ Last edited by quya on 2008-7-17 at 01:04 AM ]
第12楼 bat-zw 发表于 2008-07-17 00:41
金牌会员 发帖 1,276 积分 3,105
本人最初的方案:


[ Last edited by zw19750516 on 2008-7-17 at 05:42 PM ]
第13楼 bat-zw 发表于 2008-07-17 01:08
金牌会员 发帖 1,276 积分 3,105
两点多了,要睡觉了,白天再来给代码减肥。

[ Last edited by zw19750516 on 2008-7-17 at 02:22 AM ]
第14楼 26933062 发表于 2008-07-17 01:11
银牌会员 发帖 879 积分 2,268
按2楼的思路
这种思路如果循环最多也就显示4种,而实际有6种。


  1. @echo off
  2. :start
  3. set /a str=2468,e=5
  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,nn+=1
  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. echo.&echo%nn% 种&echo.
  16. echo ┏━━┳━━┳━━┓
  17. echo%a%%b%%c%
  18. echo ┣━━╋━━╋━━┫
  19. echo%d%%e%%f%
  20. echo ┣━━╋━━╋━━┫
  21. echo%g%%h%%i%
  22. echo ┗━━┻━━┻━━┛
  23. pause>nul&cls
  24. if %nn% equ 4 echo.&echo 再也显示不出来了
  25. goto start
小楼一夜听春雨 2008-07-17 01:26


[ Last edited by 26933062 on 2008-7-17 at 01:36 AM ]
第15楼 pusofalse 发表于 2008-07-17 05:12
银牌会员 发帖 646 积分 1,604
根据26933062前辈的代码稍微添加了几句,8种布局能全部能显示出来。。。只有8种?或更多?

1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023