[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
其实此题不用去考虑从第几个人开始,可视为全部从一开始,到最后再转换就可以了,如:
n=6 m=5 l=1
视为:n=6 xm=1 ,xl=3
5-1=4
3+4-6=1
也就是说:只要n确定后,xm=1, 则 xl 是有公式可求的。
最后:
只要给出n,必能求xl,再转换为 l 就可以了。
应该有公式,大家解解看。

TOP

公式没找到,先搞个可以处理m和n输入的。
  1. @echo off&setlocal enabledelayedexpansion
  2. :lp
  3. set str=
  4. set in=
  5. (set /p in=输入总人数:
  6. set /p m=从第几个开始:
  7. if "!in!"=="%in%" goto :eof
  8. for /l %%a in (1,1,!in!) do (call set str=!str!%%a ))
  9. set str= !str!
  10. set n=
  11. :rep
  12. for %%a in (!str!) do (set/a n+=1
  13.         if !n! equ 3 (set str=!str: %%a = !&set n=0)
  14. )
  15. echo "!str!"
  16. if " !str: =! " neq "!str!" goto :rep
  17. set/a l=(m+!str!+in-1)%%in,1/l>nul||set/a l=in
  18. echo 共有%in%人一起游戏,从第%m%个开始,最后剩下第%l%个
  19. goto :lp
复制代码

TOP

呵呵,没有比下面更简单了吧, 是倒推出来的公式,但确实这个问题很难理解。
是借用前辈的分析结果。证验结果正确。
  1. @echo off
  2. set /p n= 参加游戏人数:
  3. set /p k=从几号开始:
  4. set /p m=报数:
  5. set s=0
  6. for /l %%a in (2,1,%n%) do set /a s=(s+m)%%%%a
  7. set /a x=(s+k)%%n
  8. if %x% equ 0 (set x=%n%)
  9. echo 最后剩下是:%x%
复制代码

[ 本帖最后由 inittab 于 2009-4-29 08:21 编辑 ]
2

评分人数

TOP

楼上厉害,我想了半天,都找不到公式所在,
不知以前有没有这个公式的。

还有点小问题,就是出现结果为0的错误,
为0时其实是x=n,稍加处理一下就可以了。
经典,加分!

TOP

谢谢,确实没考虑到x=n情况. 已修正.

TOP

练练手:
  1. @echo off
  2. set /a x=13,y=29,z=3,m=0,n=0
  3. setlocal enabledelayedexpansion
  4. :o
  5. for /l %%a in (!x!,1,!y!) do (
  6.     if not defined #%%a (
  7.         set /a m+=1
  8.         set /a l=m%%z
  9.         if !l!==0 (
  10.             set #%%a=false
  11.             set /a n+=1
  12.             if !n! == !y! echo %%a&goto :p
  13.         )
  14.     )
  15. )
  16. if !n! lss !y! set x=1&goto :o
  17. :p
  18. pause
  19. goto :eof
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set start=13
  4. set "numbers= "
  5. for /l %%i in (1,1,30) do (
  6.     if !start! equ 31 ( set /a start=1 )
  7.     set numbers=!numbers!!start!
  8.     set /a start+=1
  9. )
  10. set /a n=1
  11. :loop
  12. if "%numbers:~4%" neq "" (
  13.     for %%i in (%numbers%) do (
  14.         if "!n!" equ "3" ( set "numbers=!numbers: %%i = !" & set /a n=1 )
  15.         set /a n+=1
  16.     )
  17.     goto :loop
  18. )
  19. echo %numbers: =%
复制代码

TOP

返回列表