[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
借鉴了高级语言中链表的数据结构,构造环链表(只定义了创建和删除两个函数)。
没有针对顶楼的题目,算法根据更一般的Joseph描述:编号为1,2...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为开始报数值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新报数,如此循环,直至所有人出列。
  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. set /p "person_number=请输入人数:"
  4. set /p "begin_number=请输入开始报数值:"
  5. call :create
  6. set /a cur=0,deleted=0,num=begin_number
  7. set /p=出列顺序:<nul
  8. for /l %%i in (1 1 !person_number!) do (
  9.      call :delete !cur! !num!
  10.      set /p= !deleted!<nul
  11. )
  12. pause>nul&echo.&echo.
  13. goto begin
  14. :create
  15. set /p "passwords=请输入这!person_number!个人的密码:"
  16. set /a n=1
  17. for %%i in (!passwords!) do set /a .!n!_code=%%i,.!n!_next=n+1,n+=1
  18. set .!person_number!_next=1
  19. set .0_next=1
  20. goto :eof
  21. :delete
  22. set cur=%~1
  23. for /l %%i in (2 1 %~2) do call set cur=%%.!cur!_next%%
  24. set /a deleted=.!cur!_next
  25. set /a .!cur!_next=.!deleted!_next
  26. call set num=%%.!deleted!_code%%
  27. goto :eof
复制代码
没有对输入的数据检查,测试时注意查看有没有输错。

TOP

返回列表