公司的笔试题中有这样一道:
已知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>