本帖最后由 terse 于 2012-3-11 20:49 编辑
不想在FOR里 CALL 出来 所以有一段重复代码在里面 虽显臃肿 但CALL的效率。。- @echo off&setlocal enabledelayedexpansion
- set /a N=5,R=3,S=N-R,i=1,p=1,_i=R-1
- for /l %%i in (1,1,%S%) do set /a "i*=(N-%%i+1),P*=%%i"
- set /a i/=p,P=1
- for /l %%i in (1 1 !R!) do set /a "P*=%%i,J%%i=P"&set T=10%%i&set "str=!str!#!T:~-2!
- set /aP-=1
- for /l %%i in (1 1 %R%) do set /a A%%i=%%i,B%%i=%%i+S&set T=10%%i&set "_!T:~-2!=%%i"
- for /l %%i in (0 1 %p%) do (
- set T=!str!&set M=%%i&set #=&set "$="
- for /l %%j in (%_i% -1 1) do (
- set /a "D=M/J%%j*3,M=%%i%%J%%j"
- for %%k in (!D!) do (
- for %%l in ("!T:~%%k,3!") do (
- set #=!#! %%~l
- set T=!T:%%~l=!
- )
- )
- )
- for %%j in ("!#:#=!" "!T:#=!") do for %%k in (%%~j) do set $=!$! !_%%k!
- echo!$!
- )
- for /l %%a in (2 1 !i!) do (
- for /l %%i in (1 1 !R!) do if "#!A%%i!" neq "#!B%%i!" set M=%%i
- for %%i in (!M!) do set L=!A%%i!
- for /l %%j in (1 1 %R%) do (
- if %%j geq !M! set/a A%%j=L+1,L=A%%j
- set T=10%%j
- set "_!T:~-2!=!A%%j!"
- )
- for /l %%i in (0 1 %p%) do (
- set T=!str!&set M=%%i&set #=&set "$="
- for /l %%j in (%_i% -1 1) do (
- set /a "i=M/J%%j*3,M=%%i%%J%%j"
- for %%k in (!i!) do (
- for %%l in ("!T:~%%k,3!") do (
- set #=!#! %%~l
- set T=!T:%%~l=!
- )
- )
- )
- for %%j in ("!#:#=!" "!T:#=!") do for %%k in (%%~j) do set $=!$! !_%%k!
- ECHO!$!
- )
- )
-
- pause
复制代码
|