[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我也跟一个并集的,自我感觉效率还可以:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "num=1 3-6 10 20-30 32-60 200-3000 5000 6000-8000 9000 9500 2 5 31 300-500 8000-9000 9500"
  3. for %%a in (%num%) do (
  4.     for /f "tokens=1,2 delims=-" %%b in ("%%a") do (
  5.         if "%%c" equ "" (
  6.            if not defined _%%b set "_%%b=a"
  7.            ) else (
  8.            for /l %%d in (%%b,1,%%c) do if not defined _%%d set "_%%d=a"
  9.         )
  10.     )
  11. )
  12. for /l %%a in (1,1,10000) do (
  13.     if defined _%%a (
  14.        set "str=%%a"&set /a strs=str+1
  15.        if not defined _!strs! (
  16.           if not defined flag (
  17.              set "nums=!nums!%%a,"
  18.              ) else (
  19.              set "nums=!nums!%%a],"&set "flag="
  20.           )
  21.           ) else (
  22.           if not defined flag set "nums=!nums![%%a,"&set "flag=a"
  23.        )
  24.     )
  25. )
  26. echo A和B的并集:{!nums:~,-1!}&pause>nul
复制代码

[ 本帖最后由 batman 于 2010-4-15 09:55 编辑 ]
1

评分人数

***共同提高***

TOP

新方法:
  先将A、B集合中的数字进行排序,结果中也包括了子集合符号,其中集合开始用*-表示,集合结束用-*表示,然后再进行判断,效率自是提高了很多:
  1. @echo off&setlocal enabledelayedexpansion
  2. 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"
  3. for %%a in (%a:-= %) do (
  4.     set /a n+=1
  5.     for %%b in (%a:-= %) do if %%a geq %%b set /a _%%a+=1
  6.   set ".!_%%a!=%%a"
  7. )
  8. for /l %%a in (1,1,%n%) do set "num=!num! !.%%a!"
  9. for %%a in (%a%) do (
  10.     for /f "tokens=1,2 delims=-" %%b in ("%%a") do (
  11.         if "%%c" neq "" (
  12.            set "#%%b=%%b-"&set "#%%c=-%%c"
  13.            ) else (
  14.            set "#%%b=%%b"
  15.         )
  16.     )
  17. )
  18. set /p=排序后为:<nul&set /a n=0,m=1
  19. for %%a in (%num%) do set /p=!#%%a! <nul&set /a n+=1&set "$!n!=!#%%a!"
  20. for %%a in (%num%) do (
  21.     set "str=!#%%a!"&set /a m+=1,strs=!str:-=!+1
  22.     if "!str:-=!" equ "!str!" (
  23.        if not defined #!strs! (
  24.           if not defined flag set "nums=!nums!%%a,"
  25.           ) else (
  26.           if not defined flag set "nums=!nums![%%a,"&set "flag=a"
  27.        )
  28.        ) else (
  29.        if "!str:~-1,1!" equ "-" (
  30.           if not defined flag set "nums=!nums![%%a,"&set "flag=a"
  31.           ) else (
  32.           for %%b in (!m!) do (
  33.               set "var=!$%%b!"
  34.               if "!var:~,1!" neq "-" if not defined #!strs! if defined flag set "nums=!nums!%%a],"&set "flag="
  35.           )
  36.        )
  37.     )
  38. )
  39. echo.&echo.&echo AB集合的并集为:{!nums:~,-1!}
  40. pause>nul
复制代码

[ 本帖最后由 batman 于 2010-4-16 09:58 编辑 ]
1

评分人数

    • qzwqzw: 算法存在问题,比如数字4PB + 6
***共同提高***

TOP

返回列表