以前写的,最近看了论坛上资料版块说的提高效率的方法,改进了一下,效率提高了不少。
求7个字符排列组合时我电脑用1秒,如果是8个就慢了,差不多要11秒...但是比以前的代码快多了。
思路:假如求abc的排列组合。将b插入到a的前面、后面得到bc,cb。再将a插入到bc的前面、中间、后面,cb的前面、中间、后面,得到最终6个组合。
如果还有d,就继续对前面6个组合进行插空...- @echo off&setlocal enabledelayedexpansion
- rem code by wankoilz from bbs.bathome.net
- set/p chr=请输入要排列的字符,以空格分开:
- set t=%time%
- for %%i in (%chr%) do (set a=%%i&set/a n+=1)
- set/a n-=1&set _%a%=ok&set chr=!chr:%a%=!
- (for %%1 in (%chr%) do (
- set/a m+=1
- for /f "delims=_= tokens=1" %%i in ('set _') do (
- if not !n! equ !m! (
- set _%%1 %%i=ok
- set str=%%i
- for %%j in (%%i) do set _!str:%%j=%%j %%1!=ok
- set _%%i=
- ) else (
- echo %%1 %%i&set str=%%i
- for %%j in (%%i) do echo !str:%%j=%%j %%1!
-
- ))))>c.txt
- echo %t%
- echo %time%
- pause>nul
复制代码
|