|
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: |
- @echo off&color 1f
- :start
- set /a str=2468,e=5,flag=0
- set /a w=%random%%%4
- call set x=%%str:~%w%,1%%
- if defined #%x% goto start
- set /a #%x%=1,a=x
- call set str=%%str:%a%=%%
- set /a i=15-e-a
- call set str=%%str:%i%=%%
- set /a w=%random%%%2
- call set c=%%str:~%w%,1%%
- call set str=%%str:%c%=%%
- set /a b=15-a-c,d=15-str-a,f=15-d-e,g=str,h=15-g-i
- :loop
- set /a nn+=1
- echo.&echo 第 %nn% 种&echo.
- echo ┏━━┳━━┳━━┓
- echo ┃ %a% ┃ %b% ┃ %c% ┃
- echo ┣━━╋━━╋━━┫
- echo ┃ %d% ┃ %e% ┃ %f% ┃
- echo ┣━━╋━━╋━━┫
- echo ┃ %g% ┃ %h% ┃ %i% ┃
- echo ┗━━┻━━┻━━┛
- pause>nul&cls
- if %flag% equ 0 (
- set b=%d%&set d=%b%&set g=%c%&set c=%g%&set h=%f%&set f=%h%&set flag=1&goto loop
- )
- if %nn% neq 8 goto start
- echo.&echo 总共 %nn% 种
- pause>nul
小楼一夜听春雨 2008-07-17 11:26 |
|
|
致精致简! |
|
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 |
|
|
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 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
21 楼』:
Quote: | 但最值得一提的还是quya老土的解题思路,思路对才能正确解决问题,
这也是我所一直以来信奉的原则,所以我给老土加了满分20分。 |
|
非常同意楼主的这个观点,解题思路是首位、代码技巧其次。
一开始看到这个题,我都不知道从哪里下手,本决定放弃解此题的,所以有了3楼的回帖,(2楼的解题思路是后来补上去的)但一看到2楼的思路,茅塞顿开。。。
|
致精致简! |
|
2008-7-17 21:30 |
|