<% '围成一圈报数(123报数) Dim sAction sAction =Trim(Request.QueryString("action")) If sAction ="do"Then Dim num, spe '人数,报数间隔 num =Trim(Request.Form("num")) spe =Trim(Request.Form("spe")) '错误处理 IfIsNumeric(num) =FalseOrIsNumeric(spe) =FalseThen OutputError "人数和报数间隔只能是数字" EndIf If num < spe Then OutputError "人数不能小于报数间隔" EndIf Dim aNum Dim i, j ReDim aNum(num) For i =1To num aNum(i) = i '号数和数组下标一一对应 Next Dim n_leaving, n_Pos, t '剩余人数, 当前报数人的位置 n_leaving = num '初始化剩余人数 n_Pos =0'初始化开始报数位置,0表示从1号开始报数,1表示从2号开始报数 For i =1To n_leaving If n_leaving =1ThenExitFor'如果最后只剩下一个人,报数结束 n_Pos = (n_Pos + spe) Mod n_leaving '算出下次报数的人位置 If n_Pos =0Then n_Pos = n_leaving EndIf '将已经报数的人移到数组的尾部 t = aNum(n_Pos) For j = n_Pos To n_leaving-1 aNum(j) = aNum(j+1) Next aNum(n_leaving) = t n_Pos = n_Pos -1'移走一个人后,需退一个位置 n_leaving = n_leaving -1'留下继续报数的人数减1 Next '输出结果 Response.Write "<b>人数:</b>"& num &"<br/>" Response.Write "<b>报数间隔:</b>"& spe &"<br/>" Response.Write "<b>结果:</b>" Dim s For i=num To1 Step -1 s = s & aNum(i) &"," Next s =Left(s, Len(s)-1) Response.Write s EndIf Sub OutputError(str) Response.Write "<script language='javascript'>alert('"& str &"');history.back();</script>" Response.End End Sub %> <html> <head> <title>围成一圈报数</title> </head> <body> <p> </p> <p> </p> <p align="center"> <table border=0> <form method="post" action="?action=do"> <tr><td>总人数:</td><td><input type="text" name="num" value=""></td></tr> <tr><td>报数间隔:</td><td><input type="text" name="spe" value=""></td></tr> <tr><td colspan="2"><input type="submit" value="查看结果"></td></tr> </form> </table> </p> </body> </html>
<% '围成一圈报数(123报数) Dim sAction sAction =Trim(Request.QueryString("action")) If sAction ="do"Then Dim num, spe '人数,报数间隔 num =Trim(Request.Form("num")) spe =Trim(Request.Form("spe")) '错误处理 IfIsNumeric(num) =FalseOrIsNumeric(spe) =FalseThen OutputError "人数和报数间隔只能是数字" EndIf If num < spe Then OutputError "人数不能小于报数间隔" EndIf Dim aNum Dim i ReDim aNum(num) For i =1To num aNum(i) =0'初始化数组元素为0,表示全部未报数过;如果报数过,数组元素值为 报数顺序 Next Dim n_Order, n_Count '报数顺序, 计数 n_Order =0 n_Count =0 '输出结果 Response.Write "<b>人数:</b>"& num &"<br/>" Response.Write "<b>报数间隔:</b>"& spe &"<br/>" Response.Write "<b>结果:</b>" Dim s DoWhileTrue If IsDone(aNum) =TrueThenExitDo'如果已经全部报数,那么退出 For i =1To num If aNum(i) =0Then n_Count = n_Count +1 If n_Count Mod spe =0Then n_Order = n_Order +1 aNum(i) = n_Order s = s & i &"," EndIf EndIf Next Loop s =Left(s, Len(s)-1) Response.Write s EndIf Sub OutputError(str) Response.Write "<script language='javascript'>alert('"& str &"');history.back();</script>" Response.End End Sub Function IsDone(a_Num) Dim i For i =1ToUBound(a_Num) If a_Num(i) =0Then IsDone =False ExitFunction EndIf Next IsDone =True End Function %> <html> <head> <title>围成一圈报数</title> </head> <body> <p> </p> <p> </p> <p align="center"> <table border=0> <form method="post" action="?action=do"> <tr><td>总人数:</td><td><input type="text" name="num" value=""></td></tr> <tr><td>报数间隔:</td><td><input type="text" name="spe" value=""></td></tr> <tr><td colspan="2"><input type="submit" value="查看结果"></td></tr> </form> </table> </p> </body> </html>