[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 ieutk 于 2008-8-1 02:37 发表
这里面也有类似的题目

http://bbs.bathome.net/viewthread.php?tid=850&extra=page%3D1@echo off
setlocal enabledelayedexpansion
for /l %%a in (12 -1 1) do set "str= %%a !str!"
for /l %%a in (29 -1 13) ...

  代码已经够简洁了,但存在效率问题:每循环一次还要用for循环对变量str
进行一行判断,当然在总人数和退出数不大的情况下是没有问题的,当数量提
上去以后,这个判断循环数将是可观的,效率自会大打折扣。
***共同提高***

TOP

原帖由 more 于 2008-7-30 20:25 发表
不知道这样是否正确?@echo off
set "str=13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1 2 3 4 5 6 7 8 9 10 11 12"
:again
for /f "tokens=1,2,4*" %%a in ("%str%") do (
   if not "%%c"=="" (set "s ...

  思路是好的,但代码不通用,因为for /f "tokens=*" 是有个极限值tokens=31的,
运行以下的代码就会明白:
  1. @echo off
  2. for /l %%i in (1,1,32) do call,set str=%%str%% a
  3. for /f "tokens=31" %%i in ("%str%") do echo %%i
  4. for /f "tokens=32" %%i in ("%str%") do echo %%i
  5. pause>nul
复制代码

  可能大家会说这里tokens=1,2,4*是个循环,根本不涉及到最大tokens值的问题,
是的,本题是不会出现这个tokens最大值的问题,但如果将退出数增加到31以上呢?
如总人数为100,数到50的人退出,这样的代码将无法运行。
  
***共同提高***

TOP

这里面也有类似的题目

http://bbs.bathome.net/viewthread.php?tid=850&extra=page%3D1
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (12 -1 1) do set "str= %%a !str!"
  4. for /l %%a in (29 -1 13) do set "str= %%a !str!"
  5. :main
  6. set "ie=0"
  7. for %%a in (%str%) do set /a ie+=1
  8. if %ie% neq 1 (
  9.         for %%a in (%str%) do (
  10.                 set /a num+=1
  11.                 if !num! equ 3 (
  12.                         set "num=0"
  13.                         set "str=!str: %%a =!
  14.                     )
  15.             )
  16.         goto main
  17.     )
  18. echo %str%
  19. pause
复制代码
1

评分人数

不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

头都要炸了

  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. :begin
  4. cls&set "str="&set "var="&set "n=0"&set "m=0"
  5. set /p men=请输入人数:
  6. set /p bgn=请输入开始的编号:
  7. set /a "nn=%bgn%-1"
  8. set /p num=请输入循环数:
  9. for /l %%a in (%bgn% 1 %men%) do (call set "str=%%str%% %%a")
  10. for /l %%a in (1 1 %nn%) do (call set "str=%%str%% %%a")
  11. if "%num%"=="1" (
  12.    for %%a in (%str%) do (set "res=%%a")
  13.    echo.&echo 最后剩下: !res!&echo.&pause&goto :begin
  14. )
  15. :again
  16. for %%i in (%str%) do (
  17.    set /a "m+=1"
  18.    if "!m!"=="%num%" (set "%%i="&set "m=0") else (set "%%i=!m!")
  19. )
  20. for %%b in (%str%) do (if defined %%b (set "var=!var! %%b"))
  21. for %%c in (%var%) do (set /a "n+=1")
  22. if "%n%"=="1" (echo.&echo 最后剩下: %var%&echo.&pause&goto :begin)
  23. set "n=0"&set "str=%var%"&set "var="&goto :again
复制代码

TOP

楼上的朋友可再深入一下。
n个人报数,从编号为z的人开始数,数到m的人退出,求最后的是原来的几号。
nzm为用户输入的数字。
心绪平和,眼藏静谧。

TOP

不知道这样是否正确?
  1. @echo off
  2. set "str=13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1 2 3 4 5 6 7 8 9 10 11 12"
  3. :again
  4. for /f "tokens=1,2,4*" %%a in ("%str%") do (
  5.    if not "%%c"=="" (set "str=%%c %%d %%a %%b"&goto :again) else (echo %%b&pause&exit)
  6. )
复制代码
3

评分人数

TOP

Joseph loop
我打算直接复制我的上来,却发现没保存。
给新人如何~
心绪平和,眼藏静谧。

TOP

返回列表