中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [出题][讨论][数独] 解答三部曲
« [1] [2] »
作者:
标题: [出题][讨论][数独] 解答三部曲 上一主题 | 下一主题
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 16 楼』:  

哎,牛人就是牛人。。。。。。

果然厉害。



知,不觉多。不知,乃求知
2008-8-22 22:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 17 楼』:  

测试了下,发现是你算错了呀。我还郁闷BAT居然是微秒。

你的时间计算差了10000倍!!!。

1秒=1000毫秒=1000000微秒



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-8-23 01:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 18 楼』:  

希望terse讲解下算法,我没看懂



49206C6F766520796F752067757973 54656C3A3133383238343036373837
2008-8-24 14:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 19 楼』:  



  Quote:
Originally posted by everest79 at 2008-8-24 14:11:
希望terse讲解下算法,我没看懂


@echo off&setlocal enabledelayedexpansion
:st
rem call 9次 %1-%9 即1-9行
for /l %%i in (1 1 9) do call:lp %%i
pause&exit
:lp
rem 每行获1-9随机数
    for /l %%i in (1 1 9) do set .!random!!random!!random!=%%i
    for /f "tokens=1,2 delims==" %%i in ('set .') do set str=%%j !str!&set %%i=
rem 清空出错时返回IP标签时的%1所在行的变量
    for /l %%i in (1 1 9) do set %1%%i=
rem 设定列n(起始为1) v上一行行值%1-1 y-z起始列范围值 x起始行值 变量a 判断是否1 4 7行
    set var=%str%&set/a n=1,v=%1-1,y=1,z=3,x=1,a=%1%%3
rem 根据%1范围值 设定 x(行号)
    if %1 geq 4 if %1 leq 6 (set/a x=4) else set/a x=7
:lp0
rem 根据变量列值n值 设定y-z列范围值
    if %n% geq 4 if %n% leq 6 (set/a y=4,z=6) else set/a y=7,z=9
    for %%a in (!var!) do (
rem 同行出现过 清掉返回lp0
    if defined .%%a set var=!var:%%a=!&goto lp0
rem 判断%1行之前相同列是否出现过
    for /l %%i in (1 1 %1) do if %%a equ !%%i%n%! set var=!var:%%a=!&goto lp0
rem 由变量a判断%1行是否1 4 7行 并判断x-v行的y-z列是否出现过
    if %a% neq 1 (for /l %%j in (%x% 1 %v%) do (
    for /l %%k in (%y% 1 %z%) do if %%a equ !%%j%%k! set var=!var:%%a=!&goto lp0
    ))
    set %1!n!=%%a&set .%%a=a
rem 循环1-9列
    if !n! lss 9 set/a n+=1&set var=!str:%%a=!&goto lp0
    )
rem 清空变量
    set str=&set n=
    for /l %%i in (1 1 9) do set .%%i=
rem 判断是否的到9列 设定出错30次后 重新开始
    if "!%19!"=="" set/a mn+=1&if !mn! gtr 30 (set mn=&cls&goto st)else goto lp
    for /l %%i in (1 1 9) do set .%%i=&set/p=!%1%%i! <nul
    echo.&set mn=
[ Last edited by terse on 2008-8-24 at 09:22 PM ]

   此帖被 +15 点积分         点击查看详情   
评分人:【 everest79 分数: +15  时间:2008-8-25 09:01




简单!简单!再简单!
2008-8-24 18:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 20 楼』:  

谢谢,呵呵



49206C6F766520796F752067757973 54656C3A3133383238343036373837
2008-8-25 09:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 21 楼』:  

也是毫秒级的,之前没发到这里
@echo off &setlocal enabledelayedexpansion
:test
set "numx=123456789"
set "ca=call :next"
:first
set /a ra=%random%%%9+1,rb=%random%%%9+1
set numx=!numx:%ra%=x!
set numx=!numx:%rb%=%ra%!
set numx=!numx:x=%rb%!
if %ra% neq 9 (goto :first)

set h1=%numx%
%ca% 1 2
%ca% 2 3
set h4=%h1:~2,1%%h1:~0,2%%h1:~5,1%%h1:~3,2%%h1:~8,1%%h1:~6,2%
%ca% 4 5
%ca% 5 6
set h7=%h4:~2,1%%h4:~0,2%%h4:~5,1%%h4:~3,2%%h4:~8,1%%h4:~6,2%
%ca% 7 8
%ca% 8 9
for /l %%a in (1,1,9) do (for /l %%b in (1,1,9) do (set h%%a=!h%%a:%%b=%%b !))
for /l %%a in (1,1,9) do (echo,!h%%a!)
echo, &pause &echo,
goto :test

:next
set h%2=!h%1:~3,3!!h%1:~6!!h%1:~0,3!
goto :eof




综合型编程论坛

我的作品索引
  
2009-12-26 15:11
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: