Board logo

标题: 用批处理如何显示动态变换的九宫格? [打印本页]

作者: ccwan     时间: 2007-1-14 01:29    标题: 用批处理如何显示动态变换的九宫格?

相信很多人都知道九宫格吧,



戴九履一,左三右七,二四为肩,六八为足,横竖斜三个数相加都得15
突发奇想,可不可以用批处理来显示九宫格呢?可不是简单的echo哦。
要列出九宫格局,每个格中一个数字,每隔几秒钟变换格中的数字,例如:
九宫           
4  9  2
3  5  7
8  1  6

变成
2  9  4
7  5  3
6  1  8

又变成
6  1  8
7  5  3
2  9  4

又变成
8  1  6
3  5  7
4  9  2

又变成
6  7  2
1  5  9
8  3  4

又变成
8  3  4
1  5  9
6  7  2

等等等等,要求列举所有可能,记住不是罗列,每次显示一种。
[ Last edited by ccwan on 2007-1-14 at 01:31 AM ]
作者: everest79     时间: 2007-1-14 01:40
2 4 6 8
1 3 7 9
5
河图格式是规定的
作者: ccwan     时间: 2007-1-14 01:43
并非讨论河图洛书,只要达到一楼的要求。
作者: everest79     时间: 2007-1-14 02:14
九宫八卦,很明显呀,只有八个结果
作者: vkill     时间: 2007-1-14 03:08
这个难度大啊
作者: 9527     时间: 2007-1-14 03:50
这个难度确实大,不好找规律
作者: namejm     时间: 2007-1-14 05:23
  演示代码如下:
@echo off
title 九宫格
mode con cols=40 lines=20
set n1=0
setlocal enabledelayedexpansion

:begin
cls
set n5=5
set str= 1 2 3 4 6 7 8 9
set /a n1+=1
if %n1% gtr 9 exit
call :intercept %n1%
set /a n9=15-%n1%-%n5%
call :intercept %n9%
for %%i in (%str%) do (
    set flag=
    set n2=%%i
    set str_tmp=%str%
    call :intercept !n2!
    set /a n8=15-!n2!-!n5!
    set /a n3=15-!n1!-!n2!
    set /a n7=15-!n8!-!n9!
    set /a n4=15-!n1!-!n7!
    set /a n6=15-!n3!-!n9!
    for %%j in (!n3! !n4! !n6! !n7! !n8!) do call :intercept %%j
    if not "!str!"=="" set flag=1
    set /a sum1=!n3!+!n5!+!n7!
    set /a sum2=!n4!+!n5!+!n6!
    if !sum1! equ 15 if !sum1! equ !sum2! if not defined flag call :result
    set str=!str_tmp!
)
goto begin

:intercept
set str=!str: %1=!
goto :eof

:result
cls
echo.
echo.
echo.
echo            ┌──┬──┬──┐
echo            │ %n1%  │ %n2%  │ %n3%  │
echo            ├──┼──┼──┤
echo            │ %n4%  │ %n5%  │ %n6%  │
echo            ├──┼──┼──┤
echo            │ %n7%  │ %n8%  │ %n9%  │
echo            └──┴──┴──┘
echo.
echo ________________________________________
echo.
echo             按任意键显示下一个
pause>nul
goto :eof
  写错了一个E文单词,更正一下下顺便美化了一下显示界面。

[ Last edited by namejm on 2007-1-13 at 05:38 PM ]
作者: vkill     时间: 2007-1-14 05:27
namejm   Nx
作者: lxmxn     时间: 2007-1-14 05:30

  版主实在厉害啊,PF。

作者: jy1260662     时间: 2007-1-14 08:56


  Quote:
Originally posted by lxmxn at 2007-1-13 04:30 PM:

  版主实在厉害啊,PF。

同感!~~
作者: pengfei     时间: 2007-1-14 13:25
namejm兄的代码甚为精彩~~~!这里九宫格指的是魔方阵, 楼主给出的九宫格为三阶的魔方阵, 而变换时只是以纵横为中心轴将其两侧的阵列互换了一下, 它的行、列及对角都是相同数字相加。

大家还可以扩展一下, 把阶数扩大为5或7等.
所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。如下是三阶魔方阵:

8  1  6
3  5  7
4  9  2


打印魔方阵算法:

1、将1放在第一行中间一列;

2、从2开始直到n*n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1. 例如上面的三阶魔方阵,5在4的上一行后一列;

3、如果上一个数的行数为1,则下一个数的行数为n(指最下一行). 例如: 1在第1行,则2应放在最下一行,列数同样加1;

4、当上一个数的列数为n时,下一个数的列数应为1,行数减1. 例如: 2在第3行最后一列,则3应放在第2行第1列;

5、如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面. 例如: 按上面的规定,4应该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面.由于6是第1行第3列(即最后一列),故7放在6下面.按此方法可以得到任何阶的魔方阵.
根据上面的算法用批处理实现打印魔方阵完全可以实现, 可能需要构建二维数组。

发个我以前写的打印魔方阵的小程序。

[ Last edited by pengfei on 2007-1-15 at 01:29 AM ]
附件 1: sigil.rar (2007-1-14 13:35, 4.22 K, 下载附件所需积分 1点 ,下载次数: 83)

作者: lxmxn     时间: 2007-1-14 15:14

  To pengfei :

  兄写的小程序也精彩啊,而且把其中的算法也说的很明白,精彩。

作者: ccwan     时间: 2007-1-14 21:02
namejm的水平真不是盖的,佩服得很啊!
作者: chainliq     时间: 2007-1-15 01:20
高手,KOOL````````
作者: everest79     时间: 2007-1-15 08:12

@ECHO OFF
:TOP
SET /A R=%RANDOM%%%8
SET /A R=%R%+%R%%%2
IF %R% LEQ 0 GOTO TOP
IF 0x00%R% EQU 0x00%A% (
SET Ct=1) ELSE (
SET Ct=0)
SET A=%R%
SET /A E=5
SET /A At=15-%A%
SET /A I=%At%-%E%
SET /A It=15-%I%
SET /A X=15-%A%*2-%E%
IF %X% LEQ 0 SET /A X=~%X%+1
SET /A Y=20-%A%-%X%-%I%
IF %Ct% EQU 0 (SET /A C=%X%,G=%Y%) ELSE SET /A C=%Y%,G=%X%
SET /A B=%At%-%C%,D=%At%-%G%,F=%It%-%C%,H=%It%-%G%

ECHO %A% %B% %C%
ECHO %D% %E% %F%
ECHO %G% %H% %I%
pause>nul
cls&&goto top
我也试着写了一个,反推出来的
作者: liuxin31554155     时间: 2007-1-19 05:38
貌似有更简单的推理方法.
作者: namejm     时间: 2007-1-19 06:46


  Quote:
Originally posted by liuxin31554155 at 2007-1-18 16:38:
貌似有更简单的推理方法.

  对这个感兴趣,发出来分享一下如何?
作者: honyfox     时间: 2007-1-19 08:04
真是太牛了,太专业了,我是业余爱好,无限崇拜ing。。。
作者: 6622186     时间: 2007-2-23 04:34
真有意思
作者: anqing     时间: 2007-2-23 06:01
真牛呀
p用到这部份上了。
作者: slore     时间: 2007-2-23 08:20
数独不知道谁去试下……
作者: bbq123bbq     时间: 2007-2-23 17:30
太厉害拉.......收藏慢慢消化
作者: tyh     时间: 2007-4-22 00:21
呵呵.这里算是牛人多.
作者: menglongfc     时间: 2007-4-23 02:01
都是高手啊,强的!!
作者: menglongfc     时间: 2007-4-23 02:29
下了,看不明白,学习了
作者: htysm     时间: 2007-4-23 04:33
偶是赶不上了。连看都看不懂呀。
作者: w1314ich     时间: 2007-4-23 05:48
强烈佩服~~
作者: rad9700     时间: 2007-4-24 08:13
厉害啊!!!!
作者: foxmt     时间: 2007-4-27 06:08
0x00%R% EQU 0x00%A%
這個是什麼意思呀
作者: beeny     时间: 2007-4-27 12:19
光%%%%号就能把人能看晕!
作者: flandy     时间: 2007-4-29 05:55
不错,支持
作者: 121360309     时间: 2007-12-5 01:58
kan   看晕了啊     还是不懂   太强了