返回列表 发帖
向各献丑了,变量赋值法:
@echo off&setlocal enabledelayedexpansion
for /l %%a in (0,1,9) do (
    for /f "delims=" %%b in (b.txt) do (
         for %%c in (%%b) do (
              set /a num=%%c-%%a,num=num%%10
              if !num! equ 0 set "_%%a=!_%%a! %%c"
         )
    )
)
for /f "tokens=1,2 delims==_" %%a in ('set _') do (
     set /p=%%a <nul&setlocal enabledelayedexpansion
     for %%c in (%%b) do (
          set "str=000%%c"&set "str=!str:~-3!"
            if defined #!str! (
            call,set "#!str!=%%#!str!%% %%c"
            ) else (
            set "#!str!=%%c"  
        )
     )
     for /f "tokens=2 delims==" %%d in ('set #') do set /p=%%d <nul
     echo.&endlocal
)  
pause>nulCOPY
2

评分人数

    • tyc: 利用set ,有点投机取巧的PB + 2
    • rat: 够简洁,但效率……PB + 30
***共同提高***

TOP

感觉还可以优化,两个大循环可以合并,要开会了,占下位子先。。。
***共同提高***

TOP

原帖由 terse 于 2009-4-13 17:10 发表
先抛砖 感觉可以少个FOR@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
   for %%j in (%%i) do (
       set str=%%j
       for /l %%a in (0,1,9) do (
       if "!str: ...



set真是用的经典,学习了。

TOP

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (0,1,9) do set "n%%i=%%i"
for /f "delims=" %%a in (1.txt) do (
for %%b in (%%a) do (
set num=%%b
set re=n!num:~-1!
call set "!re!=%%!re!%% %%b"
)
)
for /l %%p in (0,1,9) do call echo %%n%%p%%
pause
goto :eofCOPY
好了  今天来给我昨天那个稍微改了下  可以了  HOHO
1

评分人数

TOP

原帖由 terse 于 2009-4-13 17:10 发表
先抛砖 感觉可以少个FOR

虽然少个FOR 但CALL的效率不知道怎么样
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
   for %%j in (%%i) do (
       set str=%%j
       call set _!str:~-1!=%%_!str:~-1!%% %%j
))
for /l %%a in (0,1,9) do if not "!_%%a!"=="" echo %%a!_%%a!
pauseCOPY
1

评分人数

TOP

回复 23楼 的帖子

call 的效率比 for 差。(命令耗时清单)

以下是用 timeit.exe 测出的结果:
Average for terse.bat key over 5 runs

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        10:32 am, Tuesday, April 14 2009
Elapsed Time:     0:00:00.056
Process Time:     0:00:00.062

System Calls:     5282
Context Switches: 327
Page Faults:      586
Bytes Read:       17129
Bytes Written:    0
Bytes Other:      72752


Average for terse_call.bat key over 5 runs

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        10:32 am, Tuesday, April 14 2009
Elapsed Time:     0:00:00.143
Process Time:     0:00:00.156

System Calls:     4479
Context Switches: 658
Page Faults:      688
Bytes Read:       23031
Bytes Written:    6220
Bytes Other:      78810

[ 本帖最后由 tireless 于 2009-4-14 10:32 编辑 ]

TOP

原帖由 terse 于 2009-4-14 10:12 发表

虽然少个FOR 但CALL的效率不知道怎么样
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
   for %%j in (%%i) do (
       set str=%%j
       call set _!str:~-1!=%%_!st ...

怎么不加上排序?
***共同提高***

TOP

@echo off
setlocal ENABLEDELAYEDEXPANSION
md l100
md g100
for /l %%i in (0,1,9) do set "n%%i=%%i"
for /f "delims=" %%a in (1.txt) do (
for %%b in (%%a) do (
if %%b lss 100 (echo off >l100/%%b) else (echo off >g100/%%b)
)
)
dir /o:n /b l100 >>result.txt
dir /o:n /b g100 >>result.txt
for /f %%m in (result.txt) do (
set num=%%m
set re=n!num:~-1!
call set "!re!=%%!re!%% %%m"
)
for /l %%p in (0,1,9) do call echo %%n%%p%%
rd /s /q l100
rd /s /q g100
del result.txt
pause
goto :eofCOPY
昨天没看到有排序的要求  HOHO  现在写好了   新手   给点鼓励

TOP

将我19楼的代码简化并提效如下:
@echo off&setlocal enabledelayedexpansion
for /l %%a in (0,1,9) do (
    for /f "delims=" %%b in (b.txt) do (
         for %%c in (%%b) do (
              set /a num=%%c-%%a,num=num%%10
              if !num! equ 0 (
                 set "str=000%%c"&set "str=%%a!str:~-3!"
                 if defined _!str! (
                   call,set "_!str!=%%_!str!%% %%c"
                   ) else (
                   set "_!str!=%%c"
                 )
               )        
          )
     )
)
for /f "tokens=1,2 delims==_" %%a in ('set _') do (
     set "str=%%a"&set "str=!str:~,1!"
     if not defined !str! (
       echo.&set /p=!str! %%b <nul&set "!str!=a"
       ) else (
       set /p=%%b <nul
     )
)
pause>nulCOPY
1

评分人数

    • rat: 够简洁,但效率……PB + 30
***共同提高***

TOP

17、18楼的代码都有问题,请nanhui兄弟仔细对照题目要求测试和检查,你24楼的写得太罗索,我就没仔细看了。

[ 本帖最后由 batman 于 2009-4-14 11:57 编辑 ]
***共同提高***

TOP

回复 28楼 的帖子

写错了,效率挺好的,学习

TOP

@echo off&setlocal enabledelayedexpansion
(for /f "tokens=*" %%a in (a.txt) do (
  for %%i in (%%a) do set "var=00%%i" & echo !var:~-3!
))>a_tmp.txt
for /f "tokens=* delims=0" %%a in ('sort a_tmp.txt') do (
  set var=%%a
  for %%i in (#!var:~-1!) do (
    set "var=!%%i! "
    if "!var: %%a =!"=="!var!" set %%i=!%%i! %%a
  )
)
for /l %%a in (0 1 9) do if defined #%%a echo %%a!#%%a!
del a_tmp.txt & pauseCOPY

TOP

楼上是否有点考虑欠妥了,好像没有处理数值相同的情况!

[ 本帖最后由 batman 于 2009-4-14 19:56 编辑 ]
***共同提高***

TOP

回复 32楼 的帖子

处理了                                                                                                                   .

TOP

你楼上的代码没有处理,如果处理就要在下面这句中用if来处理:
for %%i in (%%a) do set "var=00%%i" & echo !var:~-3!
你这样就是将相同值多次赋值,只保留下最后的一次赋值,也就
是说无论数字中有多少个值相同,结果也只会有一个数字被输出
,如下面这一段代码:
@echo off
for %%a in (1 1 2 3 3 4 4) do set "_%%a=%%a"
set _
pause>nul COPY
***共同提高***

TOP

返回列表