您好,登录后才能下订单哦!
小编给大家分享一下如何使用批处理解约瑟夫环应用题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
															题目: 
  有二十九个女生(分别用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 
以上是“如何使用批处理解约瑟夫环应用题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。