中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 22:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决][难题]模拟输出数字九宫格
楼 主 [已解决][难题]模拟输出数字九宫格 发表于 2008-08-09 15:50 ·  中国 天津 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
模拟输出数字九宫格游戏(每行和每列的数字都不重复,而且是乱序),弄了三天都没弄出来,希望各位帮帮忙,就当是一个练习吧.
示例中只有1~6,希望能给出1~9的(能随机将每行中的几个数字变成空格就更好了).谢谢!!!

1 2 5 3 6 4
5 4 3 1 2 6
3 5 2 6 4 1
2 3 6 4 1 5
6 1 4 2 5 3
4 6 1 5 3 2


由于昨天没把问题描述清楚,现在再重新梳理一下,就是乱序生成9*9的数列,每行和每列都必须包含1~9这9个数字,如下:


8 7 5 2 9 1 6 4 3
2 9 6 4 3 8 5 1 7
3 4 1 7 6 5 2 8 9
6 5 9 1 7 3 4 2 8
4 2 7 9 8 6 1 3 5
1 3 8 6 5 2 7 9 4
9 8 4 5 1 7 3 6 2
7 1 2 3 4 9 8 5 6
5 6 3 8 2 4 9 7 1


7 6 3 2 1 5 9 8 4
9 5 2 6 8 4 3 1 7
8 4 1 3 9 7 6 5 2
2 1 5 4 6 9 8 7 3
4 9 6 8 7 3 1 2 5
1 3 8 5 4 2 7 9 6
3 2 7 9 5 8 4 6 1
6 8 4 7 2 1 5 3 9
5 7 9 1 3 6 2 4 8


4 6 9 1 3 2 8 5 7
5 1 3 7 4 8 2 9 6
6 2 8 5 7 9 1 4 3
9 4 5 3 2 7 6 1 8
8 7 6 2 1 5 4 3 9
1 3 2 4 8 6 9 7 5
3 8 7 6 9 4 5 2 1
7 5 4 9 6 1 3 8 2
2 9 1 8 5 3 7 6 4


2楼和5楼的是有规律的,不符合要求.

比较好的代码有:
22楼本人的代码(效率较低)
27楼terse的代码(效率较低)
29楼52306668的代码(效率较高,有规律)
31楼52306668的代码(效率较高,感觉最满意)


[ Last edited by moniuming on 2008-8-18 at 12:02 PM ]
2 发表于 2008-08-09 16:44 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
1 2 3 4 5 6
2 3 4 5 6 1
3 4 5 6 1 2
4 5 6 1 2 3
5 6 1 2 3 4
6 1 2 3 4 5

这样可以吗?
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
3 发表于 2008-08-09 16:55 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
能随机将每行中的几个数字变成空格就更好了
这是什么意思。。。
ps:要达到楼主其他的要求不难。。
批处理之家新域名:www.bathome.net
4 发表于 2008-08-09 17:04 ·  中国 天津 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
每次都生成不一样的,要随机生成,如下(把1做成2的效果):
1:

3 5 8 4 7 9 1 6 2
2 6 4 3 1 5 8 9 7
9 1 7 8 6 2 4 5 3
1 4 5 2 3 7 6 8 9
8 2 6 5 9 1 7 3 4
7 9 3 6 8 4 5 2 1
4 8 9 7 2 6 3 1 5
6 7 2 1 5 3 9 4 8
5 3 1 9 4 8 2 7 6

2:

3 _ _ _ 7 9 _ 6 2
2 _ _ _ 1 _ 8 9 7
_ 1 7 8 _ _ 4 5 3
_ 4 _ _ 3 7 _ _ _
_ 2 _ 5 _ 1 7 3 4
7 _ 3 _ 8 _ _ 2 1
4 _ 9 _ 2 6 3 _ _
6 7 _ _ 5 _ 9 _ 8
_ _ _ 9 4 8 2 7 _


[ Last edited by moniuming on 2008-8-10 at 09:29 AM ]
5 发表于 2008-08-09 17:08 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线

@echo off&setlocal enabledelayedexpansion
set "code= 9 1 2 3 4 5 6 7 8"
for /l %%i in (1,1,9) do (
set "a=!code:~1,1!"
set "code=!code:~2! !a!"
echo !code:~1!
)
pause>nul

ps:这是不是每行每列都不一样啊

[ Last edited by bat-zw on 2008-8-9 at 05:09 PM ]
批处理之家新域名:www.bathome.net
6 发表于 2008-08-09 17:15 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
随机乱序啊。每个数字都用到了,如果用不到那才难。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
7 发表于 2008-08-09 17:34 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
数独???
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
8 发表于 2008-08-09 17:38 ·  中国 天津 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
Originally posted by slore at 2008-8-9 17:34:
数独???

是啊,因为数独是日本人的叫法,我非常讨厌日本人,所以就用中国人的叫法啦
9 这样就行了 发表于 2008-08-09 17:48 ·  中国 天津 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
_ _ 5 2 9 _ 6 _ _
_ 9 _ _ _ 8 _ 1 7
3 4 _ _ 6 _ 2 _ _
_ _ 9 1 7 3 4 _ _
4 _ _ _ 8 _ _ _ 5
1 _ 8 _ _ _ 7 9 _
_ _ 4 5 _ _ 3 _ _
7 _ 2 3 _ _ _ 5 6
_ 6 _ 8 2 _ _ _ 1
10 发表于 2008-08-10 09:45 ·  中国 广东 广州 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
要求已在顶楼更新
继续期待中......
11 发表于 2008-08-10 12:36 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
你那几个样本是怎样生成的?~^_^
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
12 发表于 2008-08-10 12:50 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
理论上来说是可以的。但成功率。。。。。9*9没成功过。
@echo off&setlocal enabledelayedexpansion
for /l %%a in (0 1 6) do set var%%a=123456
set/a s=6,z=s
:loop
:: set m=%random%
set/a n+=1,m=%random%%%%s%
set a=!var%n%:~%m%,1!
if defined #%a% set/a n-=1&goto loop
set #%a%=abc
set var%n%=!var%n%:%a%=!
set "str=%str%%a% "
if %n% neq 6 goto loop
echo %str%
for /f "delims==" %%a in ('set #') do set "%%a="
set "str="
set/a s-=1
set/a n=0
if %s% neq 0 goto loop
pause
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
13 发表于 2008-08-10 13:16 ·  中国 广东 广州 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
Originally posted by pusofalse at 2008-8-10 12:36:
你那几个样本是怎样生成的?~^_^

哈哈,有一个游戏软件(exel格式)

12楼的代码在输出2行后就没了,但内存还是100%,
附件
九宫格数字游戏.rar (45.53 KiB, 下载附件所需积分 1 点, 下载次数: 5)
14 发表于 2008-08-10 13:33 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
我测试输出5个,成功率就已经非常低了,就更别说5个以上了。
就连3个时也有出错。 正在研究新方案。这类的题好复杂啊,看来我昨天太简单化了。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
15 发表于 2008-08-10 14:00 ·  中国 广东 广州 番禺区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
呵呵这样的题目要有算法才好做。
要不好麻烦的。我情愿用c去写出来。还会简单一些。
知,不觉多。不知,乃求知
论坛跳转: