新方法:
先将A、B集合中的数字进行排序,结果中也包括了子集合符号,其中集合开始用*-表示,集合结束用-*表示,然后再进行判断,效率自是提高了很多:- @echo off&setlocal enabledelayedexpansion
- set "a=1 3-6 10 20-30 32-60 200-3000 5000 6000-8000 9000 9500 2 5 31 300-500 8000-9000 9500"
- for %%a in (%a:-= %) do (
- set /a n+=1
- for %%b in (%a:-= %) do if %%a geq %%b set /a _%%a+=1
- set ".!_%%a!=%%a"
- )
- for /l %%a in (1,1,%n%) do set "num=!num! !.%%a!"
- for %%a in (%a%) do (
- for /f "tokens=1,2 delims=-" %%b in ("%%a") do (
- if "%%c" neq "" (
- set "#%%b=%%b-"&set "#%%c=-%%c"
- ) else (
- set "#%%b=%%b"
- )
- )
- )
- set /p=排序后为:<nul&set /a n=0,m=1
- for %%a in (%num%) do set /p=!#%%a! <nul&set /a n+=1&set "$!n!=!#%%a!"
- for %%a in (%num%) do (
- set "str=!#%%a!"&set /a m+=1,strs=!str:-=!+1
- if "!str:-=!" equ "!str!" (
- if not defined #!strs! (
- if not defined flag set "nums=!nums!%%a,"
- ) else (
- if not defined flag set "nums=!nums![%%a,"&set "flag=a"
- )
- ) else (
- if "!str:~-1,1!" equ "-" (
- if not defined flag set "nums=!nums![%%a,"&set "flag=a"
- ) else (
- for %%b in (!m!) do (
- set "var=!$%%b!"
- if "!var:~,1!" neq "-" if not defined #!strs! if defined flag set "nums=!nums!%%a],"&set "flag="
- )
- )
- )
- )
- echo.&echo.&echo AB集合的并集为:{!nums:~,-1!}
- pause>nul
复制代码
[ 本帖最后由 batman 于 2010-4-16 09:58 编辑 ] |