公司的笔试题之小朋友报数

公司的笔试题中有这样一道:

已知30个小朋友(以编号1,2,3...分别表示)围成一个圈。从编号为1的人开始报数,数到3的那个人出列;他的下一个人又从1开始报数,数到3的那个小朋友又出列;依此规律重复下去,直到还剩下最后一个小朋友。

请用程序算出最后一个小朋友的编号

今天自己试着做下,中规中矩的写法,毫无花哨之处,只用到了一维数组

 

<script language="javascript" type="text/javascript">

(function()
{
    var num=30;        //总人数
    var count=3;    //计数方式
    
    var allplayer = [num];    
    for(var i=0;i<num;i++){
        allplayer[i]=i+1;
    }
    
    var exitCount=0;    //离开总人数
    var counter=0;    //记录报数
    var curIndex=0;    //当前下标
    
    while(exitCount<num-1)
    {
    
        if(allplayer[curIndex]!=0)counter++;    //已经出列的空位跳过
        
        if(counter==count){
            window.document.write(allplayer[curIndex] + "号出列!<br>");
            allplayer[curIndex]=0;                //标识已经出列的位置为0
            counter = 0;
            exitCount++;
            
        }
        curIndex++;
        if(curIndex==num) curIndex =0;        //重新将下标指向第一个
        
    }    
    for(i=0;i<num;i++)
    {
        if(allplayer[i]!=0) window.document.write("最后剩下的编号是:" + allplayer[i]);
    }
})();
</script>
posted @ 2012-06-11 21:50  zdkjob  阅读(313)  评论(0编辑  收藏  举报