【程序69】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
改一下:设有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序。- @echo off&setlocal enabledelayedexpansion
- :n
- cls
- set /p n=请输入人数n:
- echo.%n%|findstr "^[1-9][0-9]*$">nul||goto n
- :m
- set /p m=请输入报数m:
- echo.%m%|findstr "^[1-9][0-9]*$">nul||goto m
- for /l %%a in (1 1 %n%) do (if %%a lss 10 (set str=!str! 0%%a) else (set str=!str! %%a))
- set/a b=3*!m!-3
- set/a c=3*!m!
- :loop
- if "!str:~%b%,3!" equ "" (set s1= 空) else (set s1=!s1!!str:~%b%,3!)
- if "!str:~%c%,3!" equ "" (set str=!str:~0,%b%!) else (set str=!str:~%c%!!str:~0,%b%!)
- set/a n-=1
- if not !n! lss !m! goto loop
- echo 出列的数据是:!s1:~1!&set s1=
- if !m! equ 1 (echo 剩下的数据是:空&set str=) else (echo 剩下的数据是:!str:~1!&set str=)
- pause>nul&goto n
复制代码
|