不错,youxi 看来是深受联盟的影响,极其讨厌if,
个人认为if应该是内部命令,不会对效率有太大影响吧?
来几个我的代码:
判断10位数字是否重复的方法。
方法一、
0-9 的总和是45,利用这个来判断
:- @echo off
- set var=4230195678
- echo %var%&echo.
- for /l %%i in (0 1 9) do call set var=%%var:%%i=%%i =%%
- for %%a in (%var%) do set /a num+=%%a
- if %num% equ 45 (echo 没有重复的数字) else echo 有重复的数字
- pause>nul
复制代码
方法二、
将每位数都定义为变量,通过defined来判断是否重复。
:- @echo off
- set var=2230195678
- echo %var%&echo.
- :lis
- if not defined _%var:~0,1% (set _%var:~0,1%=a) else set jie=a
- set var=%var:~1%
- if defined var goto lis
- if not defined jie (echo 没有重复的数字) else echo 有重复的数字
- pause
复制代码
获取10位不重复的随机数
方法一、
虽然用了if判断,但是整个流程for只需循环10次,且用的是递归调用,效率应该也算快的
- @echo off
- :start
- set "var=0 1 2 3 4 5 6 7 8 9 "
- set su=10
- setlocal enabledelayedexpansion
- call :lis "!var!"
- echo.&echo 10位随机数为:!str!
- echo.&echo 按任意键获得下个随机数
- pause>nul
- endlocal
- goto :start
- :lis
- set /a w=!random!%%!su!+1
- for %%i in (%~1) do (
- set /a num+=1
- if !num! equ !w! (
- set str=!str!%%i
- set var=!var:%%i =!
- set /a su-=1,num=0
- if defined var call :lis "!var!"
- goto :eof
- ))
- goto :eof
复制代码
[ 本帖最后由 随风 于 2008-1-13 14:52 编辑 ] |