返回列表 发帖

下面给出本人的解:

@echo off&setlocal enabledelayedexpansion
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
     set /a n+=1,a=!random!%%2
     if !a! equ 0 (
        set "_!random!!random!!random!=%%i"
        ) else (
        set "_!random!!random!!random!=!n!"
     )
)
for /f "tokens=2 delims==" %%i in ('set _') do (
     set /a n-=1
     if !n! equ 15 pause>nul&goto :eof
     set /p=%%i <nul
)COPY

[ 本帖最后由 batman 于 2008-8-26 12:13 编辑 ]
2

评分人数

    • 随风: 确实妙的很,赞! + 1
    • more: 妙!!!PB + 10 技术 + 5
***共同提高***

TOP

@echo off&setlocal enabledelayedexpansion
:jj
set aa=1
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set !aa!=%%i &set /a aa=!aa!+1
)
set va=1
:tj
set /a dd=%random%%%26+1 &set/a ss=%random%%%2
if %ss%==0 (set/p=%dd% <nul) else set/p=!%dd%! <nul
set/a va+=1
if %va% lss 11 goto tj
pause>nulCOPY

TOP

楼上没考虑重复的情况?
***共同提高***

TOP

考虑后如下,但效率低
@echo off&setlocal enabledelayedexpansion
:jj
set aa=1 &set "bb="
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set !aa!=%%i &set /a aa=!aa!+1
)
set va=1
:tj
set /a dd=%random%%%26+1 &set/a ss=%random%%%2
echo %bb% |find "%dd: =%">nul 2>nul &&goto tj
set bb=%bb% %dd%
if %ss%==1 (set/p=%dd% <nul) else set/p=!%dd%! <nul
set/a va+=1
if %va% lss 11 goto tj
pause>nulCOPY

TOP

原帖由 batman 于 2008/8/26 12:09 发表
@echo off&setlocal enabledelayedexpansion
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
     set /a n+=1,a=!random!%%2
     if !a! equ 0 (
        set "_!random!!random!!ra ...

请问 set_ 是什么意思?还有那个 set "_!random!!random!!random!=%%i 呢?

TOP

原帖由 mkl 于 2008-8-28 21:20 发表

请问 set_ 是什么意思?还有那个 set "_!random!!random!!random!=%%i 呢?

请在我的代码的第一个for循环后加入一个set _运行看看,其实set _就是显示所有以_字符
打头的变量,具体可在cmd中键入set /?查询。
***共同提高***

TOP

16楼 方法确实巧妙,不错。。!
技术问题请到论坛发帖求助!

TOP

来一个规规矩矩的

取到一个剔除一个
@echo off&setlocal enabledelayedexpansion
set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z "
for %%i in (%str%) do (set/a #+=1,%%i=#)
for /l %%a in (1,1,10) do (
    set/a asc=!random!%%#*2,#-=1
    for %%b in (!asc!) do (set asc=!str:~%%b,1!)
    for %%b in (!asc!) do (set str=!str:%%b =!&set/a $=!random!%%2,1/$ 2>nul||set asc=!%%b!)
    echo !asc!
)
pauseCOPY

TOP

楼上会存在效率问题,特别是用到了||管道符。

[ 本帖最后由 batman 于 2009-5-2 20:03 编辑 ]
***共同提高***

TOP

测试了一下,“||”管道操作虽然要比其它管道操作快,但是比起if还是要慢好多,相当于if 用时的5~8倍。
改为用if 判断。综合测度速度不错。
@echo off&setlocal enabledelayedexpansion
set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z "
for %%i in (%str%) do (set/a #+=1,%%i=#)
for /l %%a in (1,1,10) do (
    set/a asc=!random!%%#*2,#-=1
    for %%b in (!asc!) do (set asc=!str:~%%b,1!)
    for %%b in (!asc!) do (set str=!str:%%b =!&set/a $=!random!%%2&if !$! equ 0 set asc=!asc!)
    echo !asc!
)
pauseCOPY

TOP

@echo off&setlocal enabledelayedexpansion
set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z"
for %%i in (%str%) do set/a n+=1&set "_!n!=!n! %%i"
:loop
set/a m=%random%%%26+1,n=%random%%%2+1
if not defined #%m% (
    for /f "tokens=1,2" %%1 in ("!_%m%!") do (
        <nul set/p=%%%n% &set/a num+=1,#%m%=0
     )
)
if %num% lss 10 goto loop
echo/&pauseCOPY

TOP

返回列表