理解约瑟夫环应用题代码

时间:2021-06-12 09:18:55 试题 我要投稿

关于理解约瑟夫环应用题代码

  题目:

  有二十九个女生(分别用1-29号来称呼)围成一圈玩报数游戏,规则是这样的:从1开始数数,当数到3的这个人就退出游戏,而她后面的人接着从1数。。。如此一直到最后剩下一个人,现在知道最初是从13号女生开始的游戏,问最后剩下的`会是第几号女生?

  要求:

  1用批处理解答

  2代码简洁高效

  3代码通用且不生成临时文件

  加分原则:

  以思路为重(如思路独特,请简要说明)

  完全符合要求的加10分

  已有两套解决方案,见3楼more和6楼ieutk版主的代码,但个人认为这两套方案均不完美(见本人的跟贴评述),期

  待完美方案的出现,大家加油了!!!

  注:约瑟夫问题

  约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。

  more:

  复制代码 代码如下:

  @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 "str=%%c %%d %%a %%b"&goto :again) else (echo %%b&pause&exit)

  )

  ieutk:

  复制代码 代码如下:

  @echo off

  setlocal enabledelayedexpansion

  for /l %%a in (12 -1 1) do set "str= %%a !str!"

  for /l %%a in (29 -1 13) do set "str= %%a !str!"

  :main

  set "ie=0"

  for %%a in (%str%) do set /a ie+=1

  if %ie% neq 1 (

  for %%a in (%str%) do (

  set /a num+=1

  if !num! equ 3 (

  set "num=0"

  set "str=!str: %%a =!

  )

  )

  goto main

  )

  echo %str%

  pause

  batman:

  复制代码 代码如下:

  @echo off&setlocal enabledelayedexpansion

  for /l %%a in (13,1,29) do set "str=!str! #%%a#"

  for /l %%a in (1,1,12) do set "str=!str! #%%a#"

  :lp

  for %%a in (!str!) do (

  set /a n+=1

  if !n! equ 3 set "str=!str: %%a=!"&set /a n=0

  )

  for /f "tokens=2" %%a in ("%str%") do if "%%a" neq "" goto lp

  echo 最后剩下的是%str:#=%号&pause>nul

【理解约瑟夫环应用题代码】相关文章:

廿二军规与约瑟夫海勒12-06

《杜环小传》阅读理解及参考答案03-21

看约瑟夫·爱泼斯坦《嫉妒》有感07-19

黑色幽默与约瑟夫海勒(1)12-06

最新的约瑟夫·布罗茨基经典句子02-21

中班语言:约瑟夫有件旧外套08-23

文言文阅读理解之环翠亭记05-10

曲阜师范大学代码及专业代码08-05

js代码改写成jq代码的方法03-14