返回列表 发帖
其实此题不用去考虑从第几个人开始,可视为全部从一开始,到最后再转换就可以了,如:
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输入的。
@echo off&setlocal enabledelayedexpansion
:lp
set str=
set in=
(set /p in=输入总人数:
set /p m=从第几个开始:
if "!in!"=="%in%" goto :eof
for /l %%a in (1,1,!in!) do (call set str=!str!%%a ))
set str= !str!
set n=
:rep
for %%a in (!str!) do (set/a n+=1
        if !n! equ 3 (set str=!str: %%a = !&set n=0)
)
echo "!str!"
if " !str: =! " neq "!str!" goto :rep
set/a l=(m+!str!+in-1)%%in,1/l>nul||set/a l=in
echo 共有%in%人一起游戏,从第%m%个开始,最后剩下第%l%
goto :lpCOPY

TOP

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

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

评分人数

TOP

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

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

TOP

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

TOP

练练手:
@echo off
set /a x=13,y=29,z=3,m=0,n=0
setlocal enabledelayedexpansion
:o
for /l %%a in (!x!,1,!y!) do (
    if not defined #%%a (
        set /a m+=1
        set /a l=m%%z
        if !l!==0 (
            set #%%a=false
            set /a n+=1
            if !n! == !y! echo %%a&goto :p
        )
    )
)
if !n! lss !y! set x=1&goto :o
:p
pause
goto :eofCOPY

TOP

@echo off
setlocal enabledelayedexpansion
set start=13
set "numbers= "
for /l %%i in (1,1,30) do (
    if !start! equ 31 ( set /a start=1 )
    set numbers=!numbers!!start!
    set /a start+=1
)
set /a n=1
:loop
if "%numbers:~4%" neq "" (
    for %%i in (%numbers%) do (
        if "!n!" equ "3" ( set "numbers=!numbers: %%i = !" & set /a n=1 )
        set /a n+=1
    )
    goto :loop
)
echo %numbers: =%COPY

TOP

返回列表